代码之家  ›  专栏  ›  技术社区  ›  Zackton Jochem

在子节点之前预写文本

  •  1
  • Zackton Jochem  · 技术社区  · 11 年前

    我目前正在制作一个用户脚本,将一个新创建的元素前置到另一个元素的子元素的末尾。我通过以下方式成功做到了这一点:

    var link=document.createElement('a');
    link.setAttribute('href', 'http://orteil.dashnet.org/experiments/cookie/');
    link.target = 'blank';
    link.appendChild(
    document.createTextNode('Cookie Clicker Classic')
    );
    var add = document.getElementsByTagName('div')[1];
    if(add.lastChild) add.insertBefore(link,add.lastChild); 
    else add.prependChild(link);
    

    我现在的问题是,在子节点的最后一个预先存在的节点和新创建的节点之间需要有一个分隔符。我计划在它们之间加一个“|”来实现这一点。问题是,我不知道如何…我试过这样的方法:

    var管道=文档.createElement('')

    管道.prependentChild( document.createTextNode('|') );

    但我不知道“元素”类型是什么,因为它只是文本,而不是“a”标签或“p”标签。。。因此,根据我的理解,我不能去“var pipe=document.createElement('a')”。

    如果有人能至少给出一些提示(如果不是解决方案的话),我将不胜感激。 提前感谢, 丹尼尔

    1 回复  |  直到 4 年前
        1
  •  0
  •   T.J. Crowder    11 年前

    你走在了正确的轨道上 createTextNode 。只是:

    if(add.lastChild) add.insertBefore(link,add.lastChild); 
    else add.prependChild(link);
    add.insertBefore(document.createTextNode('|'), link);
    

    但我 认为 您的代码可以更简单:

    add.insertBefore(document.createTextNode('|'), add.lastChild);
    add.insertBefore(link,add.lastChild); 
    

    我不知道你为什么打电话 prependChild 什么时候 add 是空的,请注意,打电话是完全可以的 insertBefore 具有 null 作为第二个参数(它只是附加)。