Javascript 循环中的insertbefore()只添加第一行,其他行则失败

Javascript 循环中的insertbefore()只添加第一行,其他行则失败,javascript,dom,loops,xpath,greasemonkey,Javascript,Dom,Loops,Xpath,Greasemonkey,我正在使用Greasemonkey和JavaScript为网页编写注释。我想将相同的添加到多行中,但代码仅适用于第一行 以下是我所拥有的: 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_NO

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

以下是我所拥有的:

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();
}
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_迭代器类型,null);
var thishheadings2=headings2.iterateNext();
var elmAnnotation2=document.createElement('td');
elmAnnotation2.innerHTML=
'' +
“回应”+
'';
而(本标题2){
thishHeadings2.parentNode.insertBefore(elmAnnotation2.cloneNode(true),thishHeadings2);
thisHeadings2=headings2.iterateNext();
}

感谢@dandavis。根据这一点:,修改文档会使迭代无效,但不会使快照集合无效。所以现在我使用快照并修复了它。以下是解决方案:

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));
}
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=
'' +
“回应”+
'';    
对于(变量i=0;i
您要在
td
内部添加一个
td
?不是在内部而是在外部添加一个td@wonderful93,否,
createElement
在将构造函数添加到DOM时自动生成构造函数的标记,Crazy Train是right@dandavis是的,这就是我需要的!!现在我使用的是snapshotItem方法,而不是iterateNext(),我明白了。非常感谢@布罗克·亚当斯,好的,我会的!