jquery中的转义括号包含

6qqygrtg  于 2023-10-17  发布在  jQuery
关注(0)|答案(4)|浏览(97)

这是我所拥有的:

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

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

"brown (ok xl (1))"

而item.find('div:contains(' + name + '')不起作用。括号是问题所在。如何摆脱他们?

6gpjuf90

6gpjuf901#

要使用任何元字符( such as !"#$%&'()*+,./:;<=>?@[\]^'{|}~)作为名称的文字部分,必须使用两个反斜杠进行转义:\\例如,具有id="foo.bar"的元素可以使用选择器$("#foo\\.bar")
这里有一个函数来转义特殊字符并返回一个有效的jQuery选择器。在用途:之前将字符串传递给此函数:

function jqSelector(str)
{
    return str.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
}
zzwlnbp8

zzwlnbp82#

几天前我也遇到了同样的问题,但是由于一些奇怪的原因,泽塔的解决方案对我不起作用,所以我想出了

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,"");
lxkprmvk

lxkprmvk3#

与属性值选择器一样,:contains()括号内的文本可以写成纯单词或用引号括起来。(source)
所以简单地使用

item.find('div:contains(\'' + name + '\')')
/* or */
item.find('div:contains("' + name + '")')

请注意,如果name中有引号的话,您需要对引号进行转义。

qzlgjiam

qzlgjiam4#

您不必为此实现自己的解决方案(再也不用了?)。使用jQuery.escapeSelector()

console.log($.escapeSelector('this selector\'s got (many) special chars!@#$#@#$.***'));
// this\ selector\'s\ got\ \(many\)\ special\ chars\!\@\#\$\#\@\#\$\.\*\*\*

$($.escapeSelector('this selector\'s got (many) special chars!@#$#@#$.***'))
// { "length": 0, "prevObject": { /* ... */ } }

$('this selector\'s got (many) special chars!@#$#@#$.***')
// Uncaught Error: Syntax error, unrecognized expression: this selector's got (many) special chars!@#$#@#$.***

相关问题