我正在尝试使用 dojo.query 将 id 添加到元素中。我不确定这是否可能。我尝试使用下面的代码添加 id,但它不起作用。
dojo.query('div[style=""]').attr("id","main-body");
<div style="">
content
</div>
如果这是不可能的,还有其他方法吗?使用 javascript 还是 jquery?谢谢。
我正在尝试使用 dojo.query 将 id 添加到元素中。我不确定这是否可能。我尝试使用下面的代码添加 id,但它不起作用。
dojo.query('div[style=""]').attr("id","main-body");
<div style="">
content
</div>
如果这是不可能的,还有其他方法吗?使用 javascript 还是 jquery?谢谢。
您向元素添加 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>
希望这可以帮助
@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/