所以我有一个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/

10-09 20:54