web-dev-qa-db-ja.com

IDに角かっこが含まれている場合、IDでDOM要素を検索しますか?

次のようなIDを持つDOM要素があります。

something[500]

これは私のRuby on Railsアプリケーション。その親の親を削除します。これには、事前にアクセスできない変数IDがあります。

誰も私がこれについてどうやって行くことができるか知っていますか?次のコードは機能していないようです:

alert($("#something["+id+"]").parent().parent().attr("id"));

さらに調査すると、次のことが行われます。

$("#something["+id+"]")

はオブジェクトを返しますが、「。html()」または「.text()」を実行すると、結果は常にnullまたは空の文字列になります。

どんな助けも大歓迎です。

72
Mike Trpcic

角括弧をエスケープして、属性セレクターとしてカウントされないようにする必要があります。これを試して:

_alert($("#something\\["+id+"\\]").parent().parent().attr("id"));
_

セレクタの特殊文字を参照 、具体的には2番目の段落:

メタ文字(!"#$%&'()*+,./:;<=>?@[\]^``{|}~など)を名前のリテラル部分として使用するには、2つのバックスラッシュ(_\\_)でエスケープする必要があります。たとえば、_id="foo.bar"_を持つ要素は、セレクタ$("#foo\\.bar")を使用できます。 W3C CSS仕様には、 有効なCSSセレクターに関するルールの完全なセット が含まれています。 識別子のCSS文字エスケープシーケンス に関するMathias Bynensによるブログエントリも便利です。

100
karim79

あなたもできる

$('[id="something['+id+']"]')
9
steampowered

角括弧は、 jQueryセレクター に対して特別な意味を持ち、属性フィルターは具体的にフィルター処理します。

これらをエスケープするだけで、あなたの要素がうまく見つかります

$( "#something\\[" + id + "\\]" )
9
Peter Bailey

Idcannotには角括弧が含まれます。 仕様で禁止 です。

一部のブラウザはエラーを修正して対処する場合がありますが、不良データに対処するのではなく、データを修正する必要があります。

9
Quentin

これを試して:

alert($("#something\\["+id+"\\]").parent()[0].parent()[0].attr("id"));
4

「メタ文字のいずれか

!"#$%&'()*+,./:;<=>?@[\]^`{|}~

名前のリテラル部分として、2つのバックスラッシュでエスケープする必要があります:\\

たとえば、id = "foo.bar"の要素はセレクターを使用できます

$("#foo\\.bar")

"[ソース: jquery doc ]、およびid =" foo [bar] "の要素(W3Cには有効ではないが、JQueryによって認識される場合でも)は、セレクターを使用できます。

$("#foo\\[bar\\]")

(他の多くの人と同じように、しかしすべて一緒に:))

3
Elvis Ciotti

\\を使用してそれらをエスケープするか、このような何かをすることができます...

$(document.getElementById("something[" + id + "]"))
3
Josh Stodola