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

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

something[500]

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

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

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

После дальнейшего контроля, следующего:

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

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

72
задан TylerH 18 September 2019 в 14:43
поделиться

5 ответов

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

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

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

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

100
ответ дан 24 November 2019 в 12:39
поделиться

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

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

9
ответ дан 24 November 2019 в 12:39
поделиться

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

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

$( "#something\\[" + id + "\\]" )
9
ответ дан 24 November 2019 в 12:39
поделиться

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

alert($("#something\\["+id+"\\]").parent()[0].parent()[0].attr("id"));
4
ответ дан 24 November 2019 в 12:39
поделиться

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

$(document.getElementById("something[" + id + "]"))
3
ответ дан 24 November 2019 в 12:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: