jQuery选择器,其中text =某个值

我有一个对象(在这种情况下是来自js-kit的评级对象),如果评级值为“未评级”,我想使其不可见。 我无法获得正确的jQuery选择器来执行此操作。

即使下面的代码看起来应该可行,但事实并非如此。

$(".js-rating-labelText:contains('unrated')").css("visibility", "hidden"); 

.js-rating-labelText是在文本上设置的类。

有没有其他方法可以根据文本内容选择元素?

试试这个:

 $('.js-rating-labelText').filter(function(){ return (/unrated/i).test($(this).text()) }).css('visibility', 'hidden'); 

您可以创建自己的选择器方法

例如,如果您希望能够执行以下操作:

 $('.js-rating-label:hasText(unrated)'); 

您可以按如下方式定义hasText方法

 $.expr[':']['hasText'] = function(node, index, props){ return node.innerText.contains(props[3]); } 

props[3]包含’:hasText’后括号内的文本。

也许问题在于:contains('Unrated')函数的一部分。 将文本更改为任意随机值会产生相同的结果:

 $("#ratingDiv:contains('somerandomtext')").hide(); 

@ tgmdbm的优秀答案略有不同。 唯一的区别是它只选择具有与hasText()参数完全匹配的单个子文本节点的节点。 而.innerText返回所有后代文本节点的串联。

  if( ! $.expr[':']['hasText'] ) { $.expr[':']['hasText'] = function( node, index, props ) { var retVal = false; // Verify single text child node with matching text if( node.nodeType == 1 && node.childNodes.length == 1 ) { var childNode = node.childNodes[0]; retVal = childNode.nodeType == 3 && childNode.nodeValue === props[3]; } return retVal; }; } 

在js-kit函数填充文本 ,确保代码正在运行,而不是在它之前。

根据您提供的HTML,我看不出您正在测试的“未评级”文本来自何处。

但是,如果那是该div中的整个文本,则直接测试它。

 if ($('.js-rating-labelText').text() == 'unrated'){ $(this).hide(); } 

您也可以考虑使用hide()/ show()方法。

 $(".js-rating-labelText:contains('unrated')").hide() 

解释这个主题的最好方法是给出一个例子和参考链接: –

示例: –以下jQuery选择器语法从已选择(匹配)的HTML元素集中选择第一个或第n个元素。

 $("selector:contains(searchText)") 

HTML: –

 
John SmithMarketing
Jane SmithSales
Mike JordonTechnology
Mary JonesCustomer Support
Search:

jQuery的: –

 $(document).ready( function(){ $("#btnTestIt").click( function(){ var searchText = $("#txtSearch").val(); $("td:contains('" + searchText + "')").css("background-color", "yellow"); }); $("#btnReset").click( function(){ $("td").css("background-color", "white"); }); }); 

以下是一些来自javascript函数的html: