在jquery中找到转义括号

时间:2013-03-07 08:45:10

标签: javascript jquery

这就是我所拥有的:

item.find('div:contains(' + name + ')')

但是,在某些情况下,名称包含括号。在一种情况下,name具有以下值:

"brown (ok xl (1))"

而item.find('div:contains('+ name +')')不起作用。括号是问题。如何逃避它们?

3 个答案:

答案 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内转义其他引号。