这就是我所拥有的:
item.find('div:contains(' + name + ')')
但是,在某些情况下,名称包含括号。在一种情况下,name具有以下值:
"brown (ok xl (1))"
而item.find('div:contains('+ name +')')不起作用。括号是问题。如何逃避它们?
答案 0 :(得分:2)
要使用任何元字符( such as !"#$%&'()*+,./:;<=>?@[\]^'{|}~)
作为名称的文字部分,必须使用两个反斜杠进行转义:\\
例如,id="foo.bar"
的元素,可以使用选择器$("#foo\\.bar")
。
这是一个转义特殊字符并返回有效jQuery选择器的函数。使用前将字符串传递给此函数:
function jqSelector(str)
{
return str.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
}
答案 1 :(得分:1)
前几天我遇到了同样的问题,但是出于某种奇怪的原因,@ Zeta的解决方案对我没有用,所以我想出了
name = name.replace(/(\(|\)).*/g,"");
item.find("div:contains(" + name +")");
它并不完美,但它有效:)
修改强>
更好的RegEX:
name = "(d)test thingie(assaf)(asdads".replace(/\(([^\)])*\)/g,"$1 ").replace(/\(|\)(.)*/g,"$1 ");
如果你想消除括号之间的所有内容,以便包含你可以使用的工作:
name = "(d)test thingie(assaf)(asdads".replace(/\(([^\)])*\)/g,"").replace(/\(|\)(.)*/g,"");
答案 2 :(得分:0)
与属性值选择器一样,括号内的文本:contains()可以写成单词或用引号括起来。 (source)
所以简单地使用
item.find('div:contains(\'' + name + '\')')
/* or */
item.find('div:contains("' + name + '")')
请注意,如果您有任何引号,则需要在name
内转义其他引号。