【问题标题】:What does the dojo.query() return?dojo.query() 返回什么?
【发布时间】:2009-10-09 08:49:47
【问题描述】:

我刚开始接触dojo,我已经明白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 elements

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

而且我似乎找不到关于如何处理dojo.query()..返回的对象的好列表。

编辑:好的,我认为道场现在只是在惹我生气。我找到了这个方法:addContent(),它适用于上述选择器。但是我不想添加内容,我想替换内容...

【问题讨论】:

    标签: dojo


    【解决方案1】:

    查询方法返回一个NodeList对象。

    NodeList 的参考文献中,您可以找到可以应用于列表的函数列表 的元素。列表没有 innerHTML 函数,但 html 函数应该可以工作。

    HTML 中没有“输出”元素,也许您尝试使用类名“输出”来定位元素?

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

    还是id为“输出”的元素?

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

    【讨论】:

    • 不,我正在使用 HTML5 元素 output,但只是为了确保我已经尝试向元素添加一个 id,并且做同样的事情......仍然没有结果。跨度>
    • @peirix:我明白了。要使用输出元素,您应该设置它的 value 属性,而不是 innerHTML 属性。
    • 输出元素的工作方式类似于 div。它只是一个内容持有者,所以它没有 value 属性。 w3schools.com/tags/html5_output.asp 但我仍然无法让 html() 方法工作,即使在 divs...
    • 嘘!你是对的,但你忘了提到dojo.require。要使html() 方法起作用,您需要在脚本中添加dojo.require("dojo.NodeList-html");...
    • 哦,它在一个单独的文件中?文档没有提到关于hmtl函数的任何内容...我自己从来没有使用过dojo,所以我不知道代码是如何分成文件的...
    【解决方案2】:

    如果你想用相同的东西替换 all 输出标签的内容,那么这段代码应该总是有效的:

    // 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这个词很特殊。 (调试起来很麻烦,所以可能不值得。)

    【讨论】:

      【解决方案3】:

      如上所述,查询方法返回 NodeList 对象,因此您可以将其结果迭代为数组,或使用与 NodeList 一起使用的 dojo 方法(例如 attr):

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

      但是,一旦您尝试通过 id 查询节点,最好使用 dojo.byId() 方法,该方法返回 domNode:

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

      或者更多道场风格:

      dojo.attr(dojo.byId("divOutput"), "innerHTML", data)
      

      【讨论】:

        【解决方案4】:

        通过像这样添加[0] 试试这个:

        dojo.query("output")[0].innerHTML = data;
        

        【讨论】:

          【解决方案5】:

          此外,还有一个模拟 JQuery 返回对象 API 的 dojox.jq 包装器(正在开发中,即将在 1.4 中推出)

          【讨论】:

            【解决方案6】:

            文档似乎一团糟,这是我唯一可以使用 1.7 的东西,

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

            【讨论】:

              猜你喜欢
              • 2011-12-25
              • 2017-07-23
              • 2011-01-05
              • 2012-01-15
              • 2020-06-02
              • 2019-09-28
              • 2015-09-06
              • 2011-07-30
              • 2015-12-27
              相关资源
              最近更新 更多