次のようなIDを持つDOM要素があります。
something[500]
これは私のRuby on Railsアプリケーション。その親の親を削除します。これには、事前にアクセスできない変数IDがあります。
誰も私がこれについてどうやって行くことができるか知っていますか?次のコードは機能していないようです:
alert($("#something["+id+"]").parent().parent().attr("id"));
さらに調査すると、次のことが行われます。
$("#something["+id+"]")
はオブジェクトを返しますが、「。html()」または「.text()」を実行すると、結果は常にnullまたは空の文字列になります。
どんな助けも大歓迎です。
角括弧をエスケープして、属性セレクターとしてカウントされないようにする必要があります。これを試して:
_alert($("#something\\["+id+"\\]").parent().parent().attr("id"));
_
セレクタの特殊文字を参照 、具体的には2番目の段落:
メタ文字(
!"#$%&'()*+,./:;<=>?@[\]^``{|}~
など)を名前のリテラル部分として使用するには、2つのバックスラッシュ(_\\
_)でエスケープする必要があります。たとえば、_id="foo.bar"
_を持つ要素は、セレクタ$("#foo\\.bar")
を使用できます。 W3C CSS仕様には、 有効なCSSセレクターに関するルールの完全なセット が含まれています。 識別子のCSS文字エスケープシーケンス に関するMathias Bynensによるブログエントリも便利です。
あなたもできる
$('[id="something['+id+']"]')
角括弧は、 jQueryセレクター に対して特別な意味を持ち、属性フィルターは具体的にフィルター処理します。
これらをエスケープするだけで、あなたの要素がうまく見つかります
$( "#something\\[" + id + "\\]" )
Idcannotには角括弧が含まれます。 仕様で禁止 です。
一部のブラウザはエラーを修正して対処する場合がありますが、不良データに対処するのではなく、データを修正する必要があります。
これを試して:
alert($("#something\\["+id+"\\]").parent()[0].parent()[0].attr("id"));
「メタ文字のいずれか
!"#$%&'()*+,./:;<=>?@[\]^`{|}~
名前のリテラル部分として、2つのバックスラッシュでエスケープする必要があります:\\
。
たとえば、id = "foo.bar"の要素はセレクターを使用できます
$("#foo\\.bar")
"[ソース: jquery doc ]、およびid =" foo [bar] "の要素(W3Cには有効ではないが、JQueryによって認識される場合でも)は、セレクターを使用できます。
$("#foo\\[bar\\]")
(他の多くの人と同じように、しかしすべて一緒に:))
\\
を使用してそれらをエスケープするか、このような何かをすることができます...
$(document.getElementById("something[" + id + "]"))