我有一个XML文件如下.
当我使用getElementsByTagName("LEVEL2_ID"),我得到一个NodeList有Nodes,但这些节点有NULL值(换句话说,getNodeValue()每个节点的结果将返回NULL).为什么是这样?在这种情况下,我需要获取每个节点的内容值2000.
XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
<Date>01/17/2012</Date>
<LEVEL1>
<LEVEL1_ID>1000</LEVEL1_ID>
<LEVEL2>
<LEVEL2_ID>2000</LEVEL2_ID>
</LEVEL2>
</LEVEL1>
</Root>
Run Code Online (Sandbox Code Playgroud)
在Java中,打印使用getElementsByTagName()获取的第一个节点的值将返回NULL:
NodeList nodes = document.getElementsByTagName("LEVEL2_ID");
System.out.println("Value of 1st node: " + nodes.item(0).getNodeValue());
Run Code Online (Sandbox Code Playgroud) 我一直致力于非常彻底地理解 DOM。目前我正在遍历 DOM 树,似乎发现了一些不一致的地方。
请参阅此小提琴的示例:http ://jsfiddle.net/AmhVk/4/
那么问题来了,为什么nodeList有像element[0]、element 1这样的可索引列表,而HTMLElement却没有?
有人可以非常彻底地向我解释这一点吗?谢谢...
<ul id="jow">
<li><a href="">Item</a></li>
<li><a href="">Item</a></li>
<li class="active"><a href="">Item</a></li>
<li class="active"><a href="">Item</a></li>
<li><a href="">Item</a></li>
<li><a href="">Item</a></li>
</ul>
<div id="ieps"></div>
Run Code Online (Sandbox Code Playgroud)
<ul id="jow">
<li><a href="">Item</a></li>
<li><a href="">Item</a></li>
<li class="active"><a href="">Item</a></li>
<li class="active"><a href="">Item</a></li>
<li><a href="">Item</a></li>
<li><a href="">Item</a></li>
</ul>
<div id="ieps"></div>
Run Code Online (Sandbox Code Playgroud)
另外,在小提琴中,如果我删除 1 个包含“active”类的 li。这仍然会返回一个 nodeList 而不是单个 HTMLElement:jsfiddle.net/AmhVk/5
当我加载页面时,会创建一个nodeList,它看起来像这样:
[text, h4, text, span, br, input, br, span, br, input, br, span, br, input, br, span, br, input, br]
Run Code Online (Sandbox Code Playgroud)
我创建了一个for循环遍历所有这些元素的简单循环,并从DOM中删除它们中的每一个.(所有元素都在a <section>)
这是循环:
for(element in videoTitlesElement.childNodes){
if(!isNaN(element)){
videoTitlesElement.removeChild(
videoTitlesElement.childNodes[element]);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在循环结束时,nodeList如下所示:
[h4, span, input, span, input, span, input, span, input]
Run Code Online (Sandbox Code Playgroud)
并非所有元素都被删除.为什么?
谢谢.
我通常会听到,因为实时NodeLists是"坏" (参见这篇Zakas文章),并且通知了querySelectorAll返回静态的决定HTMLCollection.为什么人们认为实时NodeLists是一件坏事?代码示例可能有助于我理解这一点.
如果,每当我关心使用缓存的节点集合的值进行任何计算时,集合恰好不是一个陈旧的快照,我就不能真正看到它是一个"坏"的东西.
我完全理解用CSS Selector字符串选择元素有多么有用,但如果我只能在获取它后立即可靠地运行代码,那么它似乎比live更有用NodeList.
我正在学习香草js,并且不断出现的是,我看到一些示例代码,例如document.getElementBy ...或document.getElement(s)By ...,是每个HTML节点都有一个对应的js dom形式,其中getElementBy指向单个节点,而getElementsBy指向nodeList?
如何将以下jquery转换为javascript?
iElement.children('li')
.css({ "background": "#DDD" })
.slice(0, 1)
.css({ "background": c.col });
Run Code Online (Sandbox Code Playgroud)
IElement.children('li') 返回以下内容:
[li.point, li.point, li.point, li.point, li.point]
Run Code Online (Sandbox Code Playgroud)
这里iElement是一个ul.
问题来自于slice().iElement是一个对象数组,但我得到一个错误,说这whatever.slice()不是一个函数
我正在尝试为我的angularjs应用程序编写密码强度指令.
在查看ECMAScript兼容性表时,它表示Edge 15和Edge 16支持for ... of循环.
但是,当我运行此代码时:
const list = document.querySelectorAll('[data-test]');
console.log(list);
for (const item of list) {
console.log(item);
}Run Code Online (Sandbox Code Playgroud)
<div data-test></div>
<div data-test></div>
<div data-test></div>
<div data-test></div>
<div data-test></div>Run Code Online (Sandbox Code Playgroud)
它适用于Chrome和Firefox,但不适用于Edge.相反它说:
Object不支持属性或方法'Symbol.iterator'.
据我了解,NodeList实际上应该支持它,对吗?
这是一个自己尝试的fildde:在线测试
有人可以在这里解释问题或错误吗?
假设我有一个自定义函数,我希望它将返回一个NodeList:
getNodeList('foo');
我希望此NodeList与从以下返回的NodeList相同:
document.querySelectorAll('.foo');
如何检查我的期望是正确的?
这样做不起作用:
getNodeList('foo') == document.querySelectorAll('.foo')
Run Code Online (Sandbox Code Playgroud)
我敢肯定有一个很好的技术原因为什么它不起作用,因为它document.querySelectorAll('.foo') == document.querySelectorAll('.foo')也不起作用,所以我认为这是可以预期的。
如何测试两个NodeList是否包含相同的HTML节点?
我有一个 NodeList 对象,它是由
var buttons = document.getElementsByName("signupButton");
console.log(buttons);
Run Code Online (Sandbox Code Playgroud)
印刷
[item: function]
0: button.btn.btn-warning.btn-lg
1: button.btn.btn-warning.btn-lg
2: button.btn.btn-warning.btn-lg
length: 3
__proto__: NodeList
Run Code Online (Sandbox Code Playgroud)
但是buttons.length打印的是0。这是怎么回事?
我正在尝试保存nodeList包含XML为新文件的节点,这里是获取新XML文档并拆分为较小的节点列表XMLs:
public void split(Document inDocument) throws ParserConfigurationException,
SAXException, IOException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
SaveXML savePerJob = new SaveXML();
// Load the input XML document, parse it and return an instance of the
// Document class.
Document document = inDocument;
//all elements
//jobs
NodeList nodes = document.getDocumentElement().getChildNodes();
NodeList jobs = nodes.item(7).getChildNodes();
for(int j =0; j<jobs.getLength(); j++){
Node itm = jobs.item(j);
String itmName = itm.getFirstChild().getNodeName();
String itmID = itm.getFirstChild().getTextContent(); …Run Code Online (Sandbox Code Playgroud) nodelist ×10
javascript ×8
dom ×4
java ×2
object ×2
xml ×2
angularjs ×1
arrays ×1
ecmascript-6 ×1
for-in-loop ×1
for-loop ×1
html5 ×1