gpt4 book ai didi

javascript - 用 outerHTML 替换元素并立即访问新创建的元素

转载 作者:搜寻专家 更新时间:2023-10-31 23:00:33 25 4
gpt4 key购买 nike

我通过将其内容替换为 outerHTML 来替换 DOM 元素.这个技巧有效,但我需要立即访问新创建的 DOM 元素。

不幸的是元素的创建<x>和生成 var code 的内容不在我的控制之下。

var code, e;

(function () {
/**
* Things done inside this IIFE is not under my control
*/
code =
'<div style="border: 1px solid black;">' +
' <span>I </span>' +
' <span>want </span>' +
' <span>to </span>' +
' <span>access </span>' +
' <span>all </span>' +
' <span>these </span>' +
' <span>spans.</span>' +
'</div>';
e = document.getElementById('replace_this');
}());

e.outerHTML = code;

// by this point, element e is replaced with newly added HTML. Let's do
// an alert to make sure
alert('Check the document. New HTML is rendered.');

var spans = e.getElementsByTagName('span'); // oops! empty collection
alert(spans.length); // alerts 0
alert(e.outerHTML); // alerts '<x></x>'
<div id="container" style="padding: 20px; border: 1px dashed grey;">
<div>Don't replace this.</div>
<x id="replace_this"></x>
<div>Don't replace this either.</div>
</div>

该行为在 MDN's notes on outerHTML 中进行了解释:

Also, while the element will be replaced in the document, the variable whose outerHTML property was set will still hold a reference to the original element

所以我的问题是,如何在替换旧元素后立即访问新添加的元素?

PS:准备弃outerHTML如果有另一种方法可以用来替换元素然后访问新创建的元素。

最佳答案

最后我决定在 之前插入新元素,使用 insertAdjacentHTML , 通过调用 previousSibling 获取新元素, 然后用 parentElement 删除不必要的元素 removeChild

var code, e;

(function () {
/**
* Things done inside this IIFE is not under my control
*/
code =
'<div style="border: 1px solid black;">' +
' <span>I </span>' +
' <span>want </span>' +
' <span>to </span>' +
' <span>access </span>' +
' <span>all </span>' +
' <span>these </span>' +
' <span>spans.</span>' +
'</div>';
e = document.getElementById('replace_this');
}());

// insert the new element just before <x>
e.insertAdjacentHTML('beforeBegin', code);
// now <x>'s previousSibling should be the newly added element
var new_elem = e.previousSibling;
// get rid of <x>
e.parentElement.removeChild(e);

// by this point, element e is replaced with newly added HTML. Let's do
// an alert to make sure
alert('Check the document. New HTML is rendered.');

var spans = new_elem.getElementsByTagName('span');
alert(spans.length); // alerts 7
alert(new_elem.outerHTML); // alerts contents of new element
<div id="container" style="padding: 20px; border: 1px dashed grey;">
<div>Don't replace this.</div>
<x id="replace_this"></x>
<div>Don't replace this either.</div>
</div>

关于javascript - 用 outerHTML 替换元素并立即访问新创建的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31550944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com