Многопрофильный запрос не работает - PullRequest
1 голос
/ 17 февраля 2011

У меня есть этот HTML-элемент:

<div class="option default"></div>

... и я пытаюсь добраться до него в Dojo следующим образом:

var el = dojo.query(".option.default");

Но когда я пытаюсь:

alert(dojo.attr(el, "class"));

... Я получаю undefined.

Обновление:

По какой-то причине это работает:

alert(el.attr("class"));

Почему другой метод не работает?

Ответы [ 2 ]

3 голосов
/ 17 февраля 2011

dojo.query () возвращает список узлов DOM на основе селектора CSS, а не одного элемента. Вам нужно будет сделать:

var els = dojo.query(".option.default");
var el = els[0];
alert(dojo.attr(el, "class"));

Вот рабочий пример: http://jsfiddle.net/ArtBIT/L35k6/

1 голос
/ 18 февраля 2011

Добавил бы к комментарию, но я не могу.

@ Оролин, откуда Додзё знает, что вы знаете, что ожидаете возврата одного узла.Если он содержит отдельные элементы, то когда вы вызываете dojo.query () и действительно не знаете, сколько элементов вы ожидаете получить обратно, вам придется проверить себя.Это будет ужасно и займет более трех символов!

Если вы действительно хотите эту функцию, просто выполните одно из следующих действий:

dojo.queryFirst = function() {
    return(dojo.query(arguments)[0]);
}

или, если вам необходимо

dojo._oldQuery = dojo.query;
dojo.query = function() {
    var nodes = dojo._oldQuery(arguments);
    return nodes.length > 1 ? nodes : nodes[0];
}
...