2010-05-30 107 views
0

我试图用我自己创建的元素替换大型HTML文档中的一小部分文本。用jQuery中的链接替换文本

该文本可能是一个巨大的文本,HTML,图像,大量批量,我想要的是找到某个字符串的第一个(或全部)位置,并用一个元素替换它使用$('< span>')创建。

使用简单的text.replace('the string', $('< span>'));不会做的伎俩(我留下了[object Object],而不是实际< span>,我想。

的原因,我不只是直接注入HTML是因为我想保留的所有与我创建的对象相关的绑定,并用自定义ID进行替换,然后在HTML被修改后将绑定绑定到ID,看起来有点不太合适。 :)

+2

替换文本,如果你接受了更多的在你的其他问题,您可能会收到更多的答案。 – defines 2010-05-30 15:10:35

+0

我对我的广告网站做了同样的事情。请明天与我联系,邮箱地址为[email protected],详细了解如何在网站上将关键字替换为链接,如果您希望在网站上看到的内容多半用链接替换,并将鼠标放在该网页上文字(现在是链接)显示广告。 – 2010-05-30 15:21:17

回答

1

你更有可能想要的突出显示插件,只需修改即可包装链接。

http://www.unwrongest.com/projects/highlight/

+0

谢谢,这正是我想到的,并且实际上使用了我想避免的相同技术(分割文本,添加对象,添加其余文本)。 谢谢:) – Eli 2010-06-02 07:01:39

+0

尽可能地想,很高兴我能帮上忙。 – RobertPitt 2010-06-02 15:06:21

1

这并不容易。一旦你拿起text()你刚刚得到了一个没有元素节点信息的简单字符串,所以替换它不会改变HTML DOM。

你所要做的就是逐个搜索树中的每个Text节点。可悲的是,jQuery并没有为处理Text节点提供很多帮助。

您可以使用this questionfindText功能。这种用法将取代每个“串”和空<span>

findText(document.body, /the string/g, function(node, match) { 
    var span= document.createElement('span'); 
    node.splitText(match.index+match[0].length); 
    node.data= node.data.slice(0, match.index); 
    node.parentNode.insertBefore(span, node.nextSibling); 
}); 

(如果你需要找到在不同的文本节点和元素的文字,这是一个much more complicated proposition

1

对于一个简单的解决方案

如果你需要一个更精细的元素,你必须对你想要的位置的元素追加。

$("<span/>").appendTo(element); 

正如您的例子,它与object.toString()

+1

如果你想要替换所有字符串,你的字符串不只是第一次出现,那么你需要指定全局变量,如text.replace('string','','g'); – 2010-05-30 15:19:10

+0

对不起,我的意思是只是全球而不是全球变量。 – 2010-05-30 16:50:58