Insertbefore()在循环中只添加第一行,在其他行上失败

insertbefore() in loop only adds the first row, fails on the others

本文关键字:一行 失败 其他 添加 循环 Insertbefore      更新时间:2023-09-26

我正在使用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));
}