使用jQuery查找文本string?
假设一个网页有一个string,比如我想find的“我是一个简单的string”。 我将如何去使用JQuery?
jQuery有包含的方法。 这是你的一个片段:
<script type="text/javascript"> $(function() { var foundin = $('*:contains("I am a simple string")'); }); </script>
上面的select器select包含目标string的任何元素。 foundin将是一个包含任何匹配元素的jQuery对象。 请参阅http://docs.jquery.com/Selectors/contains#text上的API信息;
有一件事要注意与'*'通配符是,你会得到所有的元素,包括你的HTML一个身体的元素,你可能不想要的。 这就是为什么jQuery和其他地方的大多数例子使用$('div:contains(“我是一个简单的string”))
通常,jQueryselect器不会在DOM中的“文本节点”内进行search。 但是,如果使用.contents()函数,将包含文本节点,那么可以使用nodeType属性来仅筛选文本节点,并使用nodeValue属性来search文本string。
$('*','body') .andSelf() 。内容() .filter(函数(){ 返回this.nodeType === 3; }) .filter(函数(){ //只有在文本中的任何位置包含“简单string”时才匹配 返回this.nodeValue.indexOf('简单string')!= -1; }) 。每个(函数(){ //用this.nodeValue做些什么 });
这将只select包含“我是简单的string”的叶子元素。
$('*:contains("I am a simple string")').each(function(){ if($(this).children().length < 1) $(this).css("border","solid 2px red") });
将以下内容粘贴到地址栏中进行testing。
javascript: $('*:contains("I am a simple string")').each(function(){ if($(this).children().length < 1) $(this).css("border","solid 2px red") }); return false;
如果你想抓住“我是一个简单的string” 。 首先将文本包裹在像这样的元素中。
$('*:contains("I am a simple string")').each(function(){ if($(this).children().length < 1) $(this).html( $(this).text().replace( /"I am a simple string"/ ,'<span containsStringImLookingFor="true">"I am a simple string"</span>' ) ) });
然后做这个。
$('*[containsStringImLookingFor]').css("border","solid 2px red");
如果你只是想要最接近你正在search的文本的节点,你可以使用这个:
$('*:contains("my text"):last');
如果你的HTML看起来像这样,这甚至可以工作:
<p> blah blah <strong>my <em>text</em></strong></p>
使用上面的select器将find<strong>
标签,因为这是包含整个string的最后一个标签。
看看高亮 (jQuery插件)。
只是增加了托尼·米勒的答案,因为这让我90%的东西,我正在寻找,但仍然没有工作。 添加.length > 0;
到他的代码结束了我的脚本工作。
$(function() { var foundin = $('*:contains("I am a simple string")').length > 0; });
这个function应该工作。 基本上做一个recursion查找,直到我们得到一个明确的叶节点列表。
function distinctNodes(search, element) { var d, e, ef; e = []; ef = []; if (element) { d = $(":contains(\""+ search + "\"):not(script)", element); } else { d = $(":contains(\""+ search + "\"):not(script)"); } if (d.length == 1) { e.push(d[0]); } else { d.each(function () { var i, r = distinctNodes(search, this); if (r.length === 0) { e.push(this); } else { for (i = 0; i < r.length; ++i) { e.push(r[i]); } } }); } $.each(e, function () { for (var i = 0; i < ef.length; ++i) { if (this === ef[i]) return; } ef.push(this); }); return ef; }