Найти DOM-элемент по коду, когда код содержит квадратные скобки?
у меня есть элемент DOM с идентификатором, похожим на:
something[500]
который был построен моим приложением Ruby on Rails. Мне нужно иметь возможность получить этот элемент через jQuery, чтобы я мог пройти свой путь вверх по DOM, чтобы удалить родителя его родителя, у которого есть идентификатор переменной, к которому у меня нет доступа заранее.
кто-нибудь знает, как я могу это сделать? Следующий код, кажется, не работает:
alert($("#something["+id+"]").parent().parent().attr("id"));
после дальнейшего осмотра, следующее:
$("#something["+id+"]")
возвращает объект, но когда я запускаю ".html () "или".text () " на нем результат всегда равен нулю или просто пустой строке.
любая помощь будет высоко оценили.
7 ответов:
вам нужно избежать квадратных скобок, чтобы они не учитывались как селекторы атрибутов. Попробуйте это:
alert($("#something\["+id+"\]").parent().parent().attr("id"));
См. Специальные Символы В Селекторах, конкретно второй абзац:
использовать любой из мета-символов (например,
!"#$%&'()*+,./:;<=>?@[\]^``{|}~
) как литеральная часть имени, он должен быть экранирован с двумя обратными косыми чертами:\
. Например, элементid="foo.bar"
, можно использовать селектор$("#foo\.bar")
. Спецификация W3C CSS содержит элемент полный набор правил, касающихся допустимых селекторов CSS. Также полезна запись в блоге Матиаса Байненса на escape-последовательности символов CSS для идентификаторов.
код не может включить квадратные скобки. Это запрещено спецификаций.
некоторые браузеры могут исправлять ошибки и справляться, но вы должны исправить свои данные вместо того, чтобы пытаться справиться с плохими данными.
квадратные скобки имеют особое значение для селекторы jQuery атрибут фильтров в частности.
просто избежать их, и он найдет ваш элемент отлично
$( "#something\[" + id + "\]" )
Вы можете избежать их с помощью
\
или вы могли бы сделать нечто подобное...$(document.getElementById("something[" + id + "]"))
" любой из мета-символов
!"#$%&'()*+,./:;<=>?@[\]^`{|}~
как литеральная часть имени, он должен быть экранирован с двумя обратными косыми чертами:
\
.например, элемент с id= " foo.бар", можно использовать селектор
$("#foo\.bar")
" [источник: в jQuery док], и элемент с id= "foo [bar]" (хотя и не действителен для W3C, но распознан JQuery), может использовать селектор
$("#foo\[bar\]")
(просто asnwer, как и многие другие, но все вместе :))