替换如何将每个单词替换一次

Replace How to replace each word once

本文关键字:替换 一次 单词      更新时间:2023-09-26

我有一个xml字典,如下所示。

<word definition="家庭中的主要收入者"&gt养家糊口者&lt/word>lt;word definition="在竞争、竞赛或游戏中获胜或获得成功的人"&gt获胜者&lt/word>

如果我的html中有字典中的单词,该单词将被链接和定义替换为标题。当链接悬停时,用户应该看到定义。

var allwords=xmlDoc.getElementsByTagName("word");for(var i=0;i<allwords.length;i++){var name=allwords[i].lastChild.nodeValue;var链接='<a href="title="+allwords[i].lastChild.nodeValue+':'+allwords[i].getAttribute("definition")+'"gt;'+allwords[i].lastChild.nodeValue+'<a>';}

这是我的替换

函数替换器(oldstring,newsstring){document.body.innerHTML=document.body.nernerHTML.replace(oldstring,newsstring);}

但问题是一旦bread winner更改为链接形式,winner也会更改,因为braad winner包括winner

我在问是否有办法,一旦面包赢家改变赢家

提前感谢!

这样的东西怎么样:

for (var i=0; i<allwords.length; i++)
{
    if(allwords[i].firstChild.name == 'a') {
        // This word has been linked already, skip it
    }
    // your code
}

您需要某种哨兵来阻止处理已处理的术语。我建议用另一个元素包装替换后的术语(不清楚html的结构,所以我不确定什么在这里有效,但在普通html中,跨度是最简单的方式)。然后,您的逻辑将跳过替换具有您决定用其包装的任何内容的父元素的单词。

您需要遍历匹配的文本节点,并且只替换那些在DOM中没有A标记的节点作为祖先。

尝试函数strtr($text,$fromList,$toList)。它应该替换每个术语一次。