1

我正在尝试使用 dojo.query 将 id 添加到元素中。我不确定这是否可能。我尝试使用下面的代码添加 id,但它不起作用。

dojo.query('div[style=""]').attr("id","main-body");

<div style="">
  content
</div>

如果这是不可能的,还有其他方法吗?使用 javascript 还是 jquery?谢谢。

4

2 回答 2

1

您向元素添加 id 的方式是正确的。

该代码在 Firefox 17 和 Chrome 23 中运行良好,但在 IE9 中存在问题。我怀疑你可能有同样的问题。

在 IE9 中,查询div[style=""]不返回任何结果。有趣的是,它在兼容模式下运行良好!

t 似乎在正常模式下的IE9中,如果 HTML 元素具有内联的空样式属性,则在将元素添加到 DOM 时不会保留该属性。

所以一个解决方案是使用不同的查询来找到你想要的 div。您可以尝试查找样式属性为空根本没有样式属性的 div。

像这样的查询应该可以工作:

div[style=""], div:not([style])

看看下面的例子:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Test Page</title>
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/dojo/1.8.2/dojo/dojo.js"></script>
    <script type="text/javascript">
        dojo.require("dojo.NodeList-manipulate");//just for the innerHTML() function

        dojo.addOnLoad(function () {
            var nodeListByAttr = dojo.query('div[style=""], div:not([style])');
            alert('Search by attribute nodeList length:' + nodeListByAttr.length);
            nodeListByAttr.attr("id", "main-body");

            var nodeListByID = dojo.query('#main-body');
            alert('Search by id nodeList length:' + nodeListByID.length);
            nodeListByID.innerHTML('Content set after finding the element by ID');
        });
    </script>
</head>
<body>
    <div style="">
    </div>
</body>
</html>

希望这可以帮助

于 2012-12-15T08:53:59.607 回答
1

@Nikanos 的回答涵盖了我想补充的查询问题,即任何查询都返回一个元素数组,如果是 Dojo,它是dojo/NodeList.

问题是您要将相同的分配id给多个 DOM 节点,尤其是查询包含div:not([style]). 我建议使用更具体的查询div例如body

var nodes = dojo.query('body > div:first-child');    
nodes.attr("id", "main-body");

为了使它更健壮,不要操作所有节点,只操作第一个节点(即使应该只有一个节点):

dojo.query('body > div:first-child')[0].id = "main-body";

这项工作也在 IE9 中,查看实际操作:http: //jsfiddle.net/phusick/JN4cz/

用Modern Dojo编写的相同示例:http : //jsfiddle.net/phusick/BReda/

于 2012-12-15T09:44:14.757 回答