Что возвращает dojo.query()?

Я только начинаю работать с додзё и понял, что dojo.query — это то же самое, что $ в jQuery.

Но я не понял, что он возвращает. Это специализированный объект, как в jQuery?

Что я пытаюсь сделать (безуспешно):

dojo.query("output").innerHTML = data;
//this doesn't work either:
dojo.query("output").html(data);
//tried accessing by id as well
dojo.query("#output").html(data);
//and tried to access a div, incase dojo has some issues with html5 elements
dojo.query("#divOutput").html(data);

В настоящее время я использую новые элементы html5:

<output id="output">Output goes here</output>
<div id="divOutput">non-html5 output goes here</div>

И я не могу найти хороший список того, что делать с объектами, возвращаемыми dojo.query()..

редактировать: Хорошо, я думаю, что додзё просто издевается надо мной. Я нашел этот метод: addContent(), и он работает с указанным выше селектором. Но я не хочу добавлять контент, я хочу заменить контент...


person peirix    schedule 09.10.2009    source источник


Ответы (6)


Метод запроса возвращает объект NodeList.

В ссылке на NodeList вы можете найти список функций, которые вы может применяться к списку элементов. Для списка нет функции innerHTML, но функция html должна работать.

В HTML нет элемента «выход», возможно, вы пытаетесь настроить таргетинг на элементы с именем класса «выход»?

dojo.query(".output").html(data)

Или элемент с id "output"?

dojo.query("#output").html(data)
person Guffa    schedule 09.10.2009
comment
Нет, я использую элемент HTML5 output, но просто чтобы убедиться, что я попытался добавить идентификатор к элементу и сделать то же самое... все еще безрезультатно. - person peirix; 09.10.2009
comment
@peirix: понятно. Чтобы использовать выходной элемент, вы должны установить его атрибут value, а не свойство innerHTML. - person Guffa; 09.10.2009
comment
Выходной элемент работает как div. Это просто держатель контента, поэтому у него нет атрибута value. w3schools.com/tags/html5_output.asp Но я все еще не могу получить html() метод работает, даже на divs... - person peirix; 09.10.2009
comment
Шиз! Вы были правы, но забыли упомянуть dojo.require. Чтобы метод html() работал, вам нужно добавить dojo.require("dojo.NodeList-html"); в свой скрипт... - person peirix; 09.10.2009
comment
О, это в отдельном файле? В документации ничего не говорится об этом в функции hmtl... Я сам никогда не пользовался dojo, поэтому не знаю, как код делится на файлы... - person Guffa; 09.10.2009

Если вы хотите заменить все содержимое выходных тегов одним и тем же, этот код всегда должен работать:

// replace the contents of ALL <output> tags
dojo.query('output').forEach(function(node) { node.innerHTML = data; });

Dojo также предоставляет небольшой способ быстрого доступа к подобным вещам. Вы можете указать строку для функции NodeList forEach следующим образом:

// replace the contents of ALL <output> tags (as long as data is global)
dojo.query('output').forEach("item.innerHTML = data;");

Слово item в строке является особым. (Это боль для отладки, поэтому, возможно, оно того не стоит.)

person tommyjr    schedule 31.10.2009

Как было сказано выше, метод запроса возвращает объект NodeList, поэтому вы можете перебрать его результат в виде массива или использовать методы dojo, которые работают с NodeList (например, attr):

dojo.query("#divOutput").attr("innerHTML", data);

Но как только вы пытаетесь опрашивать узлы по id, лучше использовать метод dojo.byId(), который возвращает domNode:

dojo.byId("divOutput").innerHTML = data;

Или в стиле додзё:

dojo.attr(dojo.byId("divOutput"), "innerHTML", data)
person ivalkeen    schedule 13.10.2009

Попробуйте это, добавив [0] следующим образом:

dojo.query("output")[0].innerHTML = data;
person Tom    schedule 20.05.2011

Кроме того, существует оболочка dojox.jq (в разработке, появится в версии 1.4), которая эмулирует API возвращаемых объектов JQuery.

person peller    schedule 10.10.2009

Документация кажется беспорядочной, это единственное, с чем я могу работать с 1.7,

dojo.query("whatever").forEach(function(node, index, array)
{
    node...
});
person nylund    schedule 24.09.2012