【问题标题】:insertbefore() in loop only adds the first row, fails on the others循环中的 insertbefore() 仅添加第一行,其他行失败
【发布时间】:2013-06-14 17:09:42
【问题描述】:

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

【问题讨论】:

  • 您要在td 中添加td
  • 在 td 之前不在内部,而是在外部
  • @wonderful93,不,createElement添加到DOM时会自动生成构造函数的标签,Crazy Train是对的
  • @dandavis,是的,这就是我需要的!现在我使用的是 snapshotItem 方法而不是 iterateNext() 并且我明白了。非常感谢!!
  • @Brock Adams,好的,会的!

标签: javascript dom loops xpath greasemonkey


【解决方案1】:

感谢@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));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2019-05-30
    相关资源
    最近更新 更多