Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何仅替换元素上的文本内容?_Javascript_Text_Nodes - Fatal编程技术网

Javascript 如何仅替换元素上的文本内容?

Javascript 如何仅替换元素上的文本内容?,javascript,text,nodes,Javascript,Text,Nodes,我的结构如下: <li> <a><i>...</i>Some Text Here!</a> <input> <a></a> </li> …这里有一些文字! 我只想在这里更改字符串一些文本不影响(删除或更改)任何其他内容,即其所有子节点 显然,textContent,如果设置,将删除所有子元素。其他类似的方法似乎也在做同样的事情。我已经搜索了一段时间,但似乎没

我的结构如下:

<li>
    <a><i>...</i>Some Text Here!</a>
    <input>
    <a></a>
</li>
  • …这里有一些文字!
  • 我只想在这里更改字符串
    一些文本li
    下的code>不影响(删除或更改)任何其他内容,即其所有子节点

    显然,
    textContent
    ,如果设置,将删除所有子元素。其他类似的方法似乎也在做同样的事情。我已经搜索了一段时间,但似乎没有解决办法


    如果有帮助的话,我可以将类或ID设置为您在结构中看到的任何元素。

    假设您在变量
    锚定中已经有
    标记:

    anchor.lastChild.textContent = 'My text';
    

    请看下面的示例:

    var-anchor=document.querySelector('a');
    anchor.lastChild.textContent='其他文本'
    
  • 拉拉…这里有一些文字!
  • 你不能。更正

    但是,为了清洁起见,您应该将文本包装在一个span中,然后替换span中的内容。它更容易阅读,就像这样:

    HTML

    <li>
      <a><i>...</i><span class="replace-me">Some text here!</span></a>
    </li>
    

    使用
    Element.childNodes
    ,它覆盖文本节点和元素,并替换它们的
    textContent

    document.getElementsByTagName('a')[0].childNodes[1].textContent='Something else';
    
    这显然取决于标签的数量、标签之间是否有空格、要替换的文本等


    演示:

    document.getElementsByTagName('p')[0]。childNodes[1]。textContent='Something other'
    
    我是一个元素。这里有一些文字

    您还可以获取元素内容,并将每个
    节点类型检查为文本节点

    Jquery版本:

    $('a').contents().filter(function () { 
        return this.nodeType === Node.TEXT_NODE; 
    })
    .each(function () { 
        this.nodeValue = 'Something else'; 
    });
    
    Javascript版本:

    var nodes = document.getElementsByTagName('a')[0].childNodes;
    for (var i in nodes){
        if (nodes[i].nodeType === Node.TEXT_NODE)
            nodes[i].nodeValue = 'Something else';
    }
    

    将该文本包装在
    标记中并使用它。
    您不能
    。。。是的,你可以。他的问题甚至没有
    jQuery
    标记。没关系。如果他没有标记它,答案就不应该使用它。好吧,你必须接受它。还假设OP可以控制标记。。。通常情况下,也不会删除标记。没有jquery也可以这样做,只是为了显示想法。是的,我同意jquery可能不会被使用,但正如我在本例中所说的,它只是一种显示想法的较短方式
    var nodes = document.getElementsByTagName('a')[0].childNodes;
    for (var i in nodes){
        if (nodes[i].nodeType === Node.TEXT_NODE)
            nodes[i].nodeValue = 'Something else';
    }