如何避免dojo解析元素

时间:2013-04-27 22:19:18

标签: html parsing dojo tags


我的页面中有一个elemetn。我不控制这个页面中使用的所有javascripts,似乎在某些地方我的“select”元素被dojo解析并更改为dijit元素(dijit.form.select)。

此元素没有属性“data-dojo-type”,所以我不知道它为什么会被更改。

有没有办法避免使用dojo解析这个元素?

<tr>
    <th scope="row"><div dojoType="dijit.InlineEditBox">Stuff</div></th>
    <td>
        <select>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
        </select>
    </td>
</tr>

1 个答案:

答案 0 :(得分:1)

我无法在this jsfiddle中看到您遇到的问题。 InlineEditBox成为dijit,但<select>没有。该示例可以尝试Dojo 1.6.0和Dojo 1.8.3:

HTML:

<script>
    var dojoConfig = {
        parseOnLoad: false
    };
</script>
<script>
    var v16 = "https://ajax.googleapis.com/ajax/libs/dojo/1.6.0/dojo/dojo.xd.js.uncompressed.js";
    var v18 = "https://ajax.googleapis.com/ajax/libs/dojo/1.8.3/dojo/dojo.js";
    var dojoUrl = v18;
    document.writeln("<script src='" + dojoUrl + "'></scr" + "ipt>");
</script>
<table border="1">
    <tr>
        <th scope="row">
            <div id="inlineEditBox1" dojoType="dijit.InlineEditBox">Stuff</div>
        </th>
        <td>
            <select id="select1">
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
            </select>
        </td>
    </tr>
</table>

JS:

function dojo16ready() {
    if (!(dojoConfig && dojoConfig.parseOnLoad)) {
        dojo.parser.parse();
    }
}

function dojo18ready(parser, registry) {
    function go() {
        console.log("inlineEditBox1", registry.byId("inlineEditBox1"));
        console.log("select1", registry.byId("select1"));
    }
    if (!(dojoConfig && dojoConfig.parseOnLoad)) {
        parser.parse().then(go);
    }
}

function init() {
    console.log("dojo.version", dojo.version);
    if ("function" !== typeof require) {
        // Must require before onload
        dojo.require("dijit.InlineEditBox");
        dojo.addOnLoad(dojo16ready);
    } else {
        require(["dojo/parser", "dijit/registry", "dijit/InlineEditBox"], dojo18ready);
    }
}

init();