正则表达式在页面上找到包含内部标签的单词
感谢Chetan Sastry我有这个正则表达式代码来解析我的页面以获取单词列表并将TM添加到它们中。
var wordList = ["jQuery UI", "jQuery", "is"]; var regExp = new RegExp("\\b" + wordList.join("\\b|\\b") + "\\b", "g"); var $elem = $("#divWithText"); $elem.html($elem.html().replace(regExp, "$&™"));
这个正则表达式几乎是我需要的。 但是,链接看起来像:
jQuery
它最终将TM附加到href内部的jQuery而不是标记之间的jQuery。
任何人都可以帮忙吗?
我要查找的单词列表是非常具体的产品名称,它们可能出现在标签内的唯一位置是在这样的链接中。
实现此目的的唯一可靠方法是逐步执行每个子后代,如果它是文本节点,则运行替换。
实现:
- http://benalman.com/projects/jquery-replacetext-plugin/
- http://james.padolsey.com/javascript/find-and-replace-text-with-javascript/
按照自己的方式行事,不仅会冒着无意中替换实际HTML的风险,而且还会擦除目标元素中的任何DOM元素以及任何相应的事件处理程序。
JP 与一些优秀的公用事业有关。
使用直接jQuery:
$elem .contents() .filter(function() { return this.nodeType == Node.TEXT_NODE; }) .each(function(){ $(this).text($(this).text().replace(regExp, "$&™")); });
(请参阅如何使用jQuery选择文本节点? )
如何在搜索词列表中添加"jQuery"
和"jQuery UI"
? (您需要转义RegEx的特殊字符才能正常工作,但它可能更容易(如果不那么优雅)解决方案。)
如果您只是尝试替换链接中的单词,则以下内容应该有效:
var wordList = ["jQuery UI", "jQuery", "is"]; var regExp = new RegExp("\\b" + wordList.join("\\b|\\b") + "\\b", "g"); var $elem = $("#divWithText a"); $elem.html($elem.html().replace(regExp, "$&™"));