这段代码为什么显示A is undefined

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Document</title>

</head>

<body>

<select name = "edu" id = "edu">

<option value = "博士">博士~~~</option>

<option value = "本科" id="benke">本科~~~</option>

<option value = "大专">大专~~~</option>

<option value = "幼儿园">幼儿园~~~</option>

</select>



<script>


var gra = document.getElementById("edu");

var A = gra.ChildNodes;

alert(A[0].value);

</script>

</body>

</html>


慕粉3541299
浏览 2253回答 6
6回答

kofzxaaa

你那个ChildNodes应改为:childNodes(小写c)就可以执行了。

fantacy吴贝

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <select name = "edu" id = "edu"> <option value = "博士">博士~~~</option> <option value = "本科" id="benke">本科~~~</option> <option value = "大专">大专~~~</option> <option value = "幼儿园">幼儿园~~~</option> </select> <script> var gra = document.getElementById("edu"); var A = gra.childNodes; alert(A[1].firstChild.nodeValue); </script> </body> </html>从js逐句来分析。获取id为“edu”的元素节点。获取该元素下的子节点数组(nodelist)。嗯C写错了,下次注意。(小驼峰法命名函数跟变量就是第一个单词首字母小写,之后单词首字母大写。大驼峰就是所有单词首字母都大写,推荐对象命名使用大驼峰,这样一眼就能区分对象跟函数和变量的区别了,函数也是一种变量)弹出警告窗A(0)是id“edu”元素的第一个子节点。首先你的<select>与<option>之间有空格,因此这里有一个空白节点,IE下没有,其他浏览器都不会忽略这个空白节点,这点是第二。你想取得第一个子节点,实际上有一个空白节点,应该是第二个节点value="博士"的这个<option>的文本,因此你使用了value,应该使用nodeValue才对。还有一个问题在于文本节点本身是元素节点的子节点。也就是A[1].firstchild.nodeValue最后你需要继续加油,哈哈。

stone310

首先是childNodes大小写问题呢,然后childNodes指所有子元素(包括文本元素),当你代码这么写:<select name = "edu" id = "edu">   <option value = "博士">博士~~~</option>   <option value = "本科" id="benke">本科~~~</option>   //这里select和option之间,option和option之间有空白,这段空白就是文本节点;因此childNodes[0]值得是中间那段空白,自然value为undefined;可以用children(只获取元素节点)来代替childNodes[0]

执着的前端

- -别去写这种糟糕的代码,没任何意义,明白一些问题,属性名永远是小写开头,所以必然不可能出现ChildNodes这种东西。看你这写的代码,新手的实在有些过分了。

慕粉3696722

首先应该是 var A=gra.childNodes;其次A返回的是一个nodeList,里面有9个节点,而第一个是文本节点(<TextNode textContent="\n\n">)弹出的肯定是undefined。所以可以根据nodetype来选择你想要的

输输输

因为 A is undefined
打开App,查看更多内容
随时随地看视频慕课网APP