ここに私が持っているものがあります:
item.find('div:contains(' + name + ')')
ただし、名前に括弧が含まれる場合があります。あるケースでは、name は次の値を持ちます。
"brown (ok xl (1))"
item.find('div:contains(' + name + ')') は機能しません。括弧が問題です。それらを逃れる方法は?
ここに私が持っているものがあります:
item.find('div:contains(' + name + ')')
ただし、名前に括弧が含まれる場合があります。あるケースでは、name は次の値を持ちます。
"brown (ok xl (1))"
item.find('div:contains(' + name + ')') は機能しません。括弧が問題です。それらを逃れる方法は?
メタ文字を名前のリテラル部分として使用するには、2( such as !"#$%&'()*+,./:;<=>?@[\]^'{|}~)
つのバックスラッシュでエスケープする必要があります。\\
id="foo.bar"
$("#foo\\.bar")
特殊文字をエスケープし、有効な jQuery セレクターを返す関数を次に示します。使用する前に、文字列をこの関数に渡します。
function jqSelector(str)
{
return str.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$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,"");
属性値セレクターと同様に、:contains() の括弧内のテキストは、そのままの単語として記述することも、引用符で囲むこともできます。(ソース)
だから単純に使う
item.find('div:contains(\'' + name + '\')')
/* or */
item.find('div:contains("' + name + '")')
追加の引用符がある場合は、エスケープする必要があることに注意してくださいname
。