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

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

something[500]

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

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

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

После дальнейшей проверки, следующее:

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

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

Любая помощь будет принята с благодарностью.

Ответы [ 7 ]

97 голосов
/ 06 августа 2009

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

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

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

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

9 голосов
/ 13 сентября 2011

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

$('[id="something['+id+']"]')
9 голосов
/ 06 августа 2009

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

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

9 голосов
/ 06 августа 2009

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

Просто избегайте этого, и ваш элемент будет в порядке

$( "#something\\[" + id + "\\]" )
4 голосов
/ 06 августа 2009

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

alert($("#something\\["+id+"\\]").parent()[0].parent()[0].attr("id"));
3 голосов
/ 23 августа 2013

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

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

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

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

$("#foo\\.bar")

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

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

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

3 голосов
/ 06 августа 2009

Вы можете избежать их, используя \\ или вы можете сделать что-то вроде этого ...

$(document.getElementById("something[" + id + "]"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...