Найти DOM-элемент по коду, когда код содержит квадратные скобки?


у меня есть элемент DOM с идентификатором, похожим на:

something[500]

который был построен моим приложением Ruby on Rails. Мне нужно иметь возможность получить этот элемент через jQuery, чтобы я мог пройти свой путь вверх по DOM, чтобы удалить родителя его родителя, у которого есть идентификатор переменной, к которому у меня нет доступа заранее.

кто-нибудь знает, как я могу это сделать? Следующий код, кажется, не работает:

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

после дальнейшего осмотра, следующее:

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

возвращает объект, но когда я запускаю ".html () "или".text () " на нем результат всегда равен нулю или просто пустой строке.

любая помощь будет высоко оценили.

7 63

7 ответов:

вам нужно избежать квадратных скобок, чтобы они не учитывались как селекторы атрибутов. Попробуйте это:

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

См. Специальные Символы В Селекторах, конкретно второй абзац:

использовать любой из мета-символов (например,!"#$%&'()*+,./:;<=>?@[\]^``{|}~) как литеральная часть имени, он должен быть экранирован с двумя обратными косыми чертами:\. Например, элемент id="foo.bar", можно использовать селектор $("#foo\.bar"). Спецификация W3C CSS содержит элемент полный набор правил, касающихся допустимых селекторов CSS. Также полезна запись в блоге Матиаса Байненса на escape-последовательности символов CSS для идентификаторов.

код не может включить квадратные скобки. Это запрещено спецификаций.

некоторые браузеры могут исправлять ошибки и справляться, но вы должны исправить свои данные вместо того, чтобы пытаться справиться с плохими данными.

квадратные скобки имеют особое значение для селекторы jQuery атрибут фильтров в частности.

просто избежать их, и он найдет ваш элемент отлично

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

вы также можете сделать

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

попробуйте это:

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

Вы можете избежать их с помощью \ или вы могли бы сделать нечто подобное...

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

" любой из мета-символов

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

как литеральная часть имени, он должен быть экранирован с двумя обратными косыми чертами:\.

например, элемент с id= " foo.бар", можно использовать селектор

$("#foo\.bar")

" [источник: в jQuery док], и элемент с id= "foo [bar]" (хотя и не действителен для W3C, но распознан JQuery), может использовать селектор

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

(просто asnwer, как и многие другие, но все вместе :))