所以我有一个for循环,循环遍历iframe列表:
var iFr;
for (var i = 0; i < iFrames.length; i++) {
iFr = iFrames[i];
if (isFooBar()) {
iFr.dataset['sourceBackup'] = iFr.src; //assign src value to data-source-backup
iFr.removeAttribute('src'); // remove src attribute
}
}
奇怪的是,它似乎也从
dataset['sourceBackup']
或data-source-backup
中删除src值,我不明白为什么。当我把它分配给dataset['sourceBackup']
之后,我就开始做了。更新:
我甚至试过使用object.assign():
iFr.dataset['sourceBackup'] = Object.assign({}, {'src': iFr.src}).src;
然而,对于某些iframes元素,
iFr.dataset['sourceBackup']
数据集仍然会被删除,而对于其他那些令人困惑的元素则不会被删除。更新2
问题在于外部代码而不是这里的代码。我在不同的上下文中多次引用同一iframe。所以这导致了奇怪的行为。
最佳答案
这是因为iFr.dataset['sourceBackup']
和iFr.src
都指向同一个对象。赋值不生成对象的副本。因此,当删除对象时,无论使用哪个引用,它都不可用。
要实际克隆对象,请参见以下答案:How do I correctly clone a JavaScript object?
关于javascript - html + js:根据src属性为其分配值后被ovewriten的数据集变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47079594/