YUI получить элемент по методу id не работает для числовых стартовых идентификаторов - PullRequest
5 голосов
/ 03 февраля 2012

Я только что переключился с YUI2 на YUI3.Поэтому вместо YAHOO.util.Dom.get(ID_OF_ELEMENT) я попытался использовать Y.one('#ID_OF_ELEMENT)'.Он отлично работает для div с id img123 , но не с 123img или 123 .

Я также пытался использовать Y.all, но это не сработало.Единственный способ заставить его работать, все еще используя YUI, это использовать Y.DOM.byId (показанный как альтернатива на форуме YUI ).

Так что я сделал, чтобы захватитьэлемент с последним и получить Node с первым, например:

Y.one(Y.DOM.byId(ID_OF_ELEMENT)).append(SOME_HTML_CONTENT);

Я не мог в одиночку использовать только Y.DOM.byId, потому что мне нужно было манипулировать его содержимым как Узел .

Итак, есть ли способ сделать это, используя только Y.one? Это ошибка YUI?

Я сделал комментарий к этой записи форума YUI , так как я не знаю, действительно ли это ошибка, которую я мог бы заполнить Инструмент отчетов об ошибках YUI .

1 Ответ

8 голосов
/ 03 февраля 2012

Если вы используете html4:

Жетоны ID и NAME должны начинаться с буквы ([A-Za-z]) и могут сопровождаться любым количеством букв, цифр ([0-9]), дефисы ("-"), подчеркивания ("_"), двоеточия (":") и точки (".").

См. Также эту ссылку .

=== ОБНОВЛЕНИЕ ===

Для html5:

В вашем примере с использованием Y.one(...) yui вызывает собственный селектор запросов браузера: querySelector(selector) (см. здесь ).
Но не во всех браузерах функция querySelector принимает все разрешенные html5 id с.Например, собственный селектор запросов firfox10 не работает в течение id с начальной цифрой (попробуйте этот пример в разных браузерах).
Почему?Mozilla использует спецификацию CSS2.1 для селекторов:
Mozilla ссылается в своей документации querySelector на уровень API селекторов 1.
В первой главе "Аннотация" :

Селекторы, которые широко используются в CSS, - это шаблоны, соответствующие элементам в древовидной структуре [SELECT] [CSS21].

[SELECT] связан с селекторами уровня 3 и там в главе 6.5 «Селекторы идентификаторов» :

...
Селектор идентификатора содержит «знак числа» (U + 0023, #), за которым сразу следует значение идентификатора, которое должно быть идентификаторами CSS.
...

Из спецификации идентификаторов css2.1 :

InCSS, идентификаторы (включая имена элементов, классы и идентификаторы в селекторах) могут содержать только символы [a-zA-Z0-9] и символы ISO 10646 U + 00A0 и выше, плюс дефис (-) и знак подчеркивания (_); они не могут начинаться с цифры , двух дефисов или дефиса, за которыми следует цифра.Идентификаторы также могут содержать экранированные символы и любые символы ISO 10646 в виде числового кода (см. Следующий пункт).Например, идентификатор "B & W?"может быть написано как "B \ & W \?"или "B \ 26 W \ 3F".

=== ОБНОВЛЕНИЕ ===

Вы можете использовать следующий селектор [id="123"].Например:

YUI().use('node', function (Y) {
    Y.one('[id="123"]').on("click", function (e) {
        alert("Hello World!");
    });
});

Также см. этот пример .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...