JavaScript—查找具有数组语法的特定DOM元素并更新它
我想知道是否有可能在我的DOM中找到具有以下约束的特定元素:JavaScript—查找具有数组语法的特定DOM元素并更新它,javascript,jquery,dom,css-selectors,Javascript,Jquery,Dom,Css Selectors,我想知道是否有可能在我的DOM中找到具有以下约束的特定元素: 元素没有id,您必须遵循特定的顺序(childs中的childs) 简单语法(例如:数组的css选择器语法) 可选但首选:原生JS(香草) 例如: <body> <div></div> <div></div> <div> <div> <div>TEXT TO UPDATE&
- 元素没有id,您必须遵循特定的顺序(childs中的childs)
- 简单语法(例如:数组的css选择器语法)
- 可选但首选:原生JS(香草)
<body>
<div></div>
<div></div>
<div>
<div>
<div>TEXT TO UPDATE</div>
</div>
<div>
<div></div>
</body>
如果我的约束太强,您有jQuery的替代解决方案吗
编辑:由于,解决方案是:
document.querySelector("body > div:nth-child(3) > div:nth-child(1) > div:nth-child(1)").innerHTML = 'UPDATED';
您在问题中提供了部分答案,因为您似乎了解
document.querySelector()
。您需要的是一个转换函数,用于将自定义选择器转换为CSS选择器
function customSel2cssSel(sel) {
// match a nodeType followed by index brackets, use a replace function
// to replace both grouped tokens by the CSS selector pendant
return sel.replace(/([a-z]+)\[([0-9]+)\]/g, function(repl, nodeName, nodeIndex){
return nodeName + ":nth-child(" + (Number(nodeIndex) + 1) + ")";
});
}
我认为您的示例包含一个错误—DOM和选择器不匹配
<body>
<div>dont update</div>
<div>dont update</div>
<div>
<div><div>dont update</div></div>
<div><span>TEXT TO UPDATE</span></div>
<div><div>dont update</div></div>
</div>
<div>dont update</div>
</body>
不更新
不更新
不更新
要更新的文本
不更新
不更新
上述DOM将与此选择器完美配合:
document.querySelector(customSel2cssSel("body > div[2] > div[1] > span[0]"))
> <span>TEXT TO UPDATE</span>
document.querySelector(customSel2cssSel(“body>div[2]>div[1]>span[0]”)
>要更新的文本
如果您的问题的DOM和伪代码没有错误,我希望您能澄清它们。
document.querySelector('body>div:nth child(3)div')。innerHTML='UPDATED'
您显示的内容只有div
元素。在你的实际数据中是真的吗?(这是相关的)这可能有助于我的思考:正如@RajaprabhuAravindasamy所建议的,答案是正确的。请注意,n
是基于1的,而不是基于0的。document.querySelector(“div>div”).innerHTML=“UPDATED”
;将在您的示例中起作用。但是,我怀疑你的例子并不像你的问题所问的那么清楚。
document.querySelector(customSel2cssSel("body > div[2] > div[1] > span[0]"))
> <span>TEXT TO UPDATE</span>