在节点列表中查找节点
Find nodes in nodelist
我有一个这样的节点列表:
[text, div.post, comment, text, div.post, comment, text, div.post, comment, text, div.post, comment, text, div.post, comment, text]
这个节点列表是ajax调用的结果,div.post
是我的帖子,我想选择它来添加新的类名。
如何使用香草 javascript 从此节点列表中选择div.post
?
只需遍历它并添加类即可。由于不能按原样循环,因此可以使用Array.forEach
和Function.call
[].forEach.call(nodelist, function(elm){
if(elm.className.indexOf("post") > -1 && elm.nodeName == "DIV")
elm.className += ' classNameHere';
});
就像 itmars 和 Amit Jokis 在 for 循环中回答
nodelist = [text, div.post, comment, text, div.post, comment, text, div.post, comment, text, div.post, comment, text, div.post, comment, text];
for(var i=0; i< nodelist.length;i++){
var nodeItem = nodelist.item(i);
if(nodeItem.nodeName=="div" && (nodeItem.className.indexOf("post") > -1)){
//do your stuff
}
}
你可以写一个选择器查找器。这不是太具体,但肯定需要改进。您可以通过class
id
和tagName
找到选择器。它将从NodeList
返回第一个。
演示
var children = document.getElementById('foo').childNodes;
findAndPrint('#bar', children);
findAndPrint('div#baz', children);
function findAndPrint(selector, nodeList) {
print('>> Found?: ' + JSON.stringify(toEl(getNodeBySelector(nodeList, selector))));
}
function print(str) {
document.getElementById('out').innerHTML += str + '<br />';
}
function getNodeBySelector(nodeList, selector) {
var parts = selector.split(/(?=[#'.])/g);
for (var i = 0; i < nodeList.length; i++) {
var node = nodeList[i];
if (node !== undefined && isElement(node)) {
var el = toEl(node);
if (isMatch(el, parts)) {
return node;
}
}
};
return undefined;
}
function isElement(node) {
try {
return node instanceof HTMLElement;
} catch (e) {
return (typeof node === "object") &&
(node.nodeType === 1) && (typeof node.style === "object") &&
(typeof node.ownerDocument === "object");
}
}
function toEl(node) {
if (node) {
return {
'name': node.tagName.toLowerCase(),
'id': node.getAttribute('id'),
'class': node.getAttribute('class')
};
}
return undefined;
}
function isMatch(el, parts) {
for (var i = 0; i < parts.length; i++) {
var part = parts[i];
if (part.indexOf('.') == 0) {
if (el.class != null && el.class.indexOf(part.substr(1)) === -1) {
return false;
}
} else if (part.indexOf('#') == 0) {
if (el.id != null && el.id !== part.substr(1)) {
return false;
}
} else {
if (el.name != null && el.name !== part) {
return false;
}
}
}
return true;
}
<div id="out"></div>
<div id="foo">
<div id="bar"></div>
<div id="baz"></div>
</div>
也。。。
您可以使用以下命令修改NodeList
中的每个节点,而不是重新设置第一个元素:
function applyToNode(nodeList, selector, callback) {
var parts = selector.split(/(?=[#'.])/g);
for (var i = 0; i < nodeList.length; i++) {
var node = nodeList[i];
if (node !== undefined && isElement(node)) {
if (isMatch(toEl(node), parts)) {
callback(node, i, nodeList);
}
}
};
}
其中回调是:
function callback(node, index, nodeList) {
// ...
}
这里: https://developer.mozilla.org/en-US/docs/Web/API/NodeList.item
nodelist = [text, div.post, comment, text, div.post, comment, text, div.post, comment, text, div.post, comment, text, div.post, comment, text];
youritem = nodelist.item(1);
要遍历并找到所有匹配标准,您必须像 Amit 的答案一样做一个循环。否则,上面的解决方案将适用于挑选它。
相关文章:
- JavaScript选择器:查找包含具有特定属性的子体的节点
- jquery在元素中查找文本节点,并使用标记进行连接和包装
- 查找与锁定和更新调度相关的一个或两个节点模块
- 查找将 onclick 事件分配给节点的代码
- 在选定节点的有向、未加权图中查找所有路径
- 使用 XPath 查找节点后的文本节点
- 连接到节点服务器自动查找掩码
- 使用数据库查找在节点中导出大文件 - 避免多次数据库调用
- 如何使用 JavaScript 在 DOM 节点上查找事件侦听器
- 在节点列表中查找节点
- 如何在不依赖 javascript 中的 id、类或内容的情况下查找和检索节点位置
- 查找嵌套 xml 节点的更简单方法
- 在 HTML 页面中查找所有文本节点
- 如何查找所有选定节点的相邻节点和边缘?D3.
- 在 heroku 上的节点中查找CERT_UNTRUSTED错误的源
- 使用 jQuery 在 Ajax 结果中查找节点
- 聚合物自动节点查找不起作用
- DOJO:LazyTreeGrid中的Lazy加载节点-查找示例代码
- 具有动态id值的聚合物自动节点查找
- 从起始节点查找分隔值