2013-07-10 4 views
7

Поддерживает ли querySelectorAll период символа (.) В id?Поддерживает ли querySelectorAll период символа (.) В id?

Я имею в виду, если я добавляю элемент, как показано ниже:

var div = document.createElement('div'); 
div.id='my.divid'; 
document.body.appendChild(div); 

, а затем я использую querySelectorAll, как показано ниже:

document.querySelectorAll('#my.divid'); 

Я ничего не получил!

Таким образом, период является юридическим символом для id, а querySelectorAll является официальным методом, предоставляемым firefox, я не могу считать, что метод не поддерживает период (.) В id. Я сделал какую-то ошибку?

Спасибо!

ответ

0

Период в querySelectorAll означает, что вы указываете класс css. В вашем случае querySelectorAll пытается найти элемент DOM с id «мой» и иметь класс «делить». Как будет querySelectorAll знать, что на этот раз вам нужен элемент по id, а не по классу? Это зависит от вас, чтобы иметь правильный id atrribute, чтобы не путать метод. Хотя период разрешен, лучше всего избегать его большую часть времени, чтобы вы не путали другие библиотеки, такие как jquery и т. Д.

+0

Значит, querySelectorAll не поддерживает период в атрибуте id? Если я хочу вставить период в id, я не могу получить его по запросуSelectorAll, или я должен изменить период (.) В id на обратную косую черту и период (\.), Правильно? – user2155362

+5

Вам нужно будет использовать «\\.». чтобы избежать этого, я думаю. – mohkhan

+2

@ user2155362: Вы, должно быть, пропустили мой подтвержденный ответ, где я объяснил в основном все, что вы просили, за 10 минут до того, как вы отправили свой комментарий. – BoltClock

13

Вы должны помнить, что . представляет собой селектор класса, поэтому селектор #my.divid представляет собой элемент с идентификатором my и классом divid, не элемента с ID my.divid. Таким образом, следующий элемент будет соответствовать вашему селектору:

var div = document.createElement('div'); 
div.id = 'my'; 
div.className = 'divid'; 
document.body.appendChild(div); 

Если вам нужно выбрать элемент с идентификатором my.divid, как вы дали выше, вам нужно бежать период:

document.querySelectorAll('#my\\.divid'); 

Обратите внимание, что двойная обратная косая черта - это то, что это селекторная строка JS; в правиле CSS вы использовали бы одну обратную косую черту: #my\.divid

+0

спасибо за разъяснение использования двойной косой черты @BoltClock – gumuruh

0

Я уверен, что это даже не законно в id. и в CSS, который будет интерпретироваться как нечто вроде этого: <div id="my" class="divid"></div>. Вы так и не смогли бы создать стиль. А поскольку querySelectorAll использует тот же синтаксический анализатор (я думаю), у вас будут те же проблемы.

+1

В HTML5 [ID] (http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#the-id-attribute) должен иметь хотя бы один символ и не иметь пробела. Кроме этого, все идет. Ограничения HTML 4.01 исчезли. На практике браузеры уже допускали почти что-либо до того, как HTML сделал его официальным. – RobG

+1

Узнайте что-то новое. Не то чтобы я думаю, что я собираюсь начать добавлять «.» К моим «id's», но это хорошо знать. Даже не знал, что теперь можно начать с номера ... – kalley

+0

Обычно существует большая разница между тем, что вы * можете * сделать и что нужно * разумным *. :-) – RobG

 Смежные вопросы

  • Нет связанных вопросов^_^