javascript - HTML DOM : Why childNodes[i] cannot be correctly get for "<li>" elements when there are line breaks?

标签 javascript html dom

当我尝试 HTML DOM 时,就会出现这个难题。

为了简单起见,代码如下:

================================================== =======

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script>
		function jsTest()
		{
			var x = document.getElementById("fruits");
			var y = x.childNodes[2].innerHTML;
			alert(y);
		}
	</script>
</head>
<body>
	<ul id="fruits">
		<li>Apple</li>
		<li>Banana</li>
		<li>Pear</li>
		<li>Orange</li>
	</ul>
	<button onclick="jsTest()">TRY</button>
</body>
</html>

正如您可以尝试的那样,当单击“TRY”按钮时,它会警告“未定义”,但为什么?

我尝试了以下修改:

(1)。 var y = x.childNodes[2].innerHTML; >>> var y = x.childNodes[1].innerHTML;

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script>
		function jsTest()
		{
			var x = document.getElementById("fruits");
			var y = x.childNodes[1].innerHTML;
			alert(y);
		}
	</script>
</head>
<body>
	<ul id="fruits">
		<li>Apple</li>
		<li>Banana</li>
		<li>Pear</li>
		<li>Orange</li>
	</ul>
	<button onclick="jsTest()">TRY</button>
</body>
</html>

这一次,它起作用了,并带有警报“Apple”。 类似的试验是将childNodes[1]更改为childNodes[0](结果:未定义),childNodes[2](结果:未定义),childNodes[3](结果:“Banana”),childNodes[4](结果:未定义) )...

(2).我还尝试了“children[i]”而不是“childNodes[i]”,它工作正常(i=0 || 1 || 2 || 3 )!

例如:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script>
		function jsTest()
		{
			var x = document.getElementById("fruits");
			var y = x.children[2].innerHTML;
			alert(y);
		}
	</script>
</head>
<body>
	<ul id="fruits">
		<li>Apple</li>
		<li>Banana</li>
		<li>Pear</li>
		<li>Orange</li>
	</ul>
	<button onclick="jsTest()">TRY</button>
</body>
</html>

<强>(3)。将所有“li”标签保留在一行中,不要换行,现在 childNode[i] (i=1 || 2 || 3 || 4) 可以正常工作!!

例如:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script>
		function jsTest()
		{
			var x = document.getElementById("fruits");
			var y = x.childNodes[3].innerHTML;
			alert(y);
		}
	</script>
</head>
<body>
	<ul id="fruits">
		<li>Apple</li><li>Banana</li><li>Pear</li><li>Orange</li>
	</ul>
	<button onclick="jsTest()">TRY</button>
</body>
</html>

备注:以上测试均在 Google Chrome/IE 11/Firefox/Opera/Win10 Edge 等浏览器中进行测试。

所以我的问题是: 在“li”元素上应用 childNodes[i] 函数时,这是否是一个“不成文的规则”? 或者 这只是childNodes[i]函数的BUG吗?

我是一名中国自学者,学习时间约为2个月,恐怕我在这里提出的第一个问题太简单了,我尝试在这里和谷歌上搜索类似的问题,但失败了:(

无论如何,谢谢你的回答:)

最佳答案

更改:

var y = x.childNodes[2].innerHTML;

致:

var y = x.children[2].textContent;

最终代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script>
		function jsTest()
		{
			var x = document.getElementById("fruits");
			var y = x.children[2].textContent;
			alert(y);
		}
	</script>
</head>
<body>
	<ul id="fruits">
		<li>Apple</li>
		<li>Banana</li>
		<li>Pear</li>
		<li>Orange</li>
	</ul>
	<button onclick="jsTest()">TRY</button>
</body>
</html>

关于javascript - HTML DOM : Why childNodes[i] cannot be correctly get for "<li>" elements when there are line breaks?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39377291/

相关文章:

javascript - 如何使用自定义对象创建自定义对象?

java - 用java解析xml DOM子节点

html - 在 IE11 中选择一个选项后下拉菜单向上移动

PHP 提交后不在下拉列表中显示更新的值

javascript - 获取具有无效类型/语言属性的脚本已被弃用并将被删除

javascript - php move_uploaded_file 函数不起作用,但记录保存在数据库中

javascript - 如何从 CSHTML.CS 页面操作 DOM?

javascript - 将鼠标悬停在 div 的嵌套项上

javascript - 正则表达式仅检查数字(负数和正数)

html - 如何在 CSS 中更改图像背景位置?