Javascript 将包含其他标记的标记中的一个文本替换为另一个文本

Javascript 将包含其他标记的标记中的一个文本替换为另一个文本,javascript,html,Javascript,Html,我有以下HTML元素: <p id="myP">Some text<span onclick="myFunc()"> to change</span></p> 。。。但是,我已经了解到,这不仅会覆盖文本,还会覆盖嵌套在p中的span元素。因此,利用上次的学习,我尝试创建一个文本节点: function myFunc(){ var myP = document.getElementById("myP"); myP.appendChi

我有以下HTML元素:

<p id="myP">Some text<span onclick="myFunc()"> to change</span></p>
。。。但是,我已经了解到,这不仅会覆盖文本,还会覆盖嵌套在p中的span元素。因此,利用上次的学习,我尝试创建一个文本节点:

function myFunc(){
    var myP = document.getElementById("myP");
    myP.appendChild(document.createTextNode("Some other text"));
} 
但是,这显然是错误的,因为它将追加文本而不是替换它。我应该如何编写JavaScript函数来获得一些文本与其他文本的纯替换,而不影响嵌套的跨度

我知道这似乎是一个基本问题,但我是一个完全的初学者,还不知道如何处理HTML对象。提前谢谢

注意我想我可以简单地做到:

myP.innerText = "Some other text<span onclick="myFunc()"> to change</span>"
myP.innerText=“要更改的其他文本”

。。。但是除了复杂之外,因为这是一个最小化的示例w.r.t.真正的代码,我想这是有史以来最不公平的解决方案,所以我想学习正确的方法。

为什么不使用另一个元素来实现它呢

<p><span id="to-change">Some text</span> <span onclick="myFunc()">to change</span></p>
只需获取textNode

函数myFunc(){
var myP=document.getElementById(“myP”).firstChild;
myP.nodeValue=“其他文本”;
}

要更改的某些文本

,或者您可以用新的文本节点替换第一个文本节点:

函数myFunc(){
var myP=document.getElementById(“myP”);
myP.replaceChild(document.createTextNode(“其他一些文本”),myP.childNodes[0]);
}

对于真正简单的方法,需要更改一些文本:

函数myFunc(){
var myP=document.getElementById(“myP”);
var cn=myP.childNodes[0];//其中cn.nodeType==3(文本节点)
cn.textContent=“其他一些文本”;
}

一些要更改的文本

可能重复的@PaulRoub,在我看来,您指出为重复的问题并不完全相同,因为它只想替换某些元素上的属性。此外,你所说的问题没有答案,而这里的用户努力提供高质量的答案(我总是谦虚地认为):)你误解了另一个问题;它试图避免替换属性等。如果
“某些文本”
出现(a)多次或(b)在
span
标记之后,则此处的最高评分答案(与此处接受的答案不同)仍然有效。我以为你在寻找更一般的东西,但显然我错了。非常感谢,这是一个“战略”方法,所以我不能拒绝你的投票!但是,我更喜欢指向对象的解决方案,它不需要任何HTML修订。无论如何,非常感谢:)谢谢你dfsq,我支持你的问题,因为这是我最喜欢的解决方案,但为了时间起见,我接受了adeneo的,他说了同样的话:)谢谢你Brad,我很感激。为了确定时间,我接受了阿德内奥的回答,几秒钟前他写了同样的话:)非常感谢!谢谢@adeneo,这绝对是我想要的方法:)
<p><span id="to-change">Some text</span> <span onclick="myFunc()">to change</span></p>