javascript - insertbefore() in 循环仅添加第一行,其他行失败

标签 javascript dom loops xpath greasemonkey

我正在使用 Greasemonkey 和 JavaScript 为网页编写注释。我想添加相同的<td>多行,但代码仅适用于第一行。

这是我所拥有的:

var headings2 = document.evaluate('/html/body/table/tbody/tr/td[2]/font/center[2]/table[2]/tbody/tr/td/table/tbody/tr[position()>1]/td[2]',document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
var thisHeadings2 = headings2.iterateNext(); 
var elmAnnotation2 = document.createElement('td');
  elmAnnotation2.innerHTML = 
    '<font size="1" face="Verdana, Arial" color="#000080">' +
    '<b>Response</b>' +
    '</font>';
while(thisHeadings2){
  thisHeadings2.parentNode.insertBefore(elmAnnotation2.cloneNode(true), thisHeadings2);
  thisHeadings2 = headings2.iterateNext();
}

最佳答案

感谢@dandavis。据此:http://help.dottoro.com/ljtfvvpx.php ,修改文档会使迭代失效,但不会使快照集合失效。所以现在我使用快照并修复了它。解决办法如下:

var headings2 = document.evaluate('/html/body/table/tbody/tr/td[2]/font/center[2]/table[2]/tbody/tr/td/table/tbody/tr[position()>1]/td[2]',document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
var elmAnnotation2 = document.createElement('td');
elmAnnotation2.innerHTML = 
    '<font size="1" face="Verdana, Arial" color="#000080">' +
    '<b>Response</b>' +
    '</font>';    
for(var i = 0; i < headings2.snapshotLength; i++){
    headings2.snapshotItem(i).parentNode.insertBefore(elmAnnotation2.cloneNode(true), headings2.snapshotItem(i));
}

关于javascript - insertbefore() in 循环仅添加第一行,其他行失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17113804/

相关文章:

javascript - 如何在 Angular 2.0.0 中解析数据时显示服务员?

javascript - 在服务器上实现 HTML DOM 重写逻辑

javascript - 导航到页面后运行 javascript

javascript - 我应该使用 Table.cells[] 吗?

c++ - 正确使用内部函数和openmp

javascript - 我的 JavaScript for 循环 if/else 语句有什么问题?

javascript - 如何将下面的代码编写为 jquery?

获取选定选项的 Javascript 在 Webkit/FF 中有效,但在 IE 中无效

javascript - 如何修复 RichEmbed Discord.js

java - 如何检查字符串数组上的字符值?