0

ここに私が持っているものがあります:

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

ただし、名前に括弧が含まれる場合があります。あるケースでは、name は次の値を持ちます。

"brown (ok xl (1))"

item.find('div:contains(' + name + ')') は機能しません。括弧が問題です。それらを逃れる方法は?

4

3 に答える 3

4

メタ文字を名前のリテラル部分として使用するには、2( such as !"#$%&'()*+,./:;<=>?@[\]^'{|}~)つのバックスラッシュでエスケープする必要があります。\\id="foo.bar"$("#foo\\.bar")

特殊文字をエスケープし、有効な jQuery セレクターを返す関数を次に示します。使用する前に、文字列をこの関数に渡します。

function jqSelector(str)
{
    return str.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
}
于 2013-03-07T08:54:38.333 に答える
1

数日前に同じ問題が発生しましたが、奇妙な理由で@Zetaのソリューションが機能しなかったため、思いついたのです。

name = name.replace(/(\(|\)).*/g,"");
item.find("div:contains(" + name +")");

完璧ではありませんが、機能します:)

編集

より良い正規表現:

name = "(d)test thingie(assaf)(asdads".replace(/\(([^\)])*\)/g,"$1 ").replace(/\(|\)(.)*/g,"$1 ");

括弧の間のすべてを削除して、作業が含まれるようにする場合は、次を使用できます。

name = "(d)test thingie(assaf)(asdads".replace(/\(([^\)])*\)/g,"").replace(/\(|\)(.)*/g,"");
于 2013-03-07T08:52:43.000 に答える
0

属性値セレクターと同様に、:contains() の括弧内のテキストは、そのままの単語として記述することも、引用符で囲むこともできます。(ソース)

だから単純に使う

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

追加の引用符がある場合は、エスケープする必要があることに注意してくださいname

于 2013-03-07T08:47:41.250 に答える