为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕粉3541299 2016-10-11 16:13:22
<!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>
查看完整描述

6 回答

已采纳
?
kofzxaaa

TA贡献66条经验 获得超26个赞

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

查看完整回答
2 反对 回复 2016-10-11
?
fantacy吴贝

TA贡献11条经验 获得超10个赞

<!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逐句来分析。

  1. 获取id为“edu”的元素节点。

  2. 获取该元素下的子节点数组(nodelist)。嗯C写错了,下次注意。(小驼峰法命名函数跟变量就是第一个单词首字母小写,之后单词首字母大写。大驼峰就是所有单词首字母都大写,推荐对象命名使用大驼峰,这样一眼就能区分对象跟函数和变量的区别了,函数也是一种变量)

  3. 弹出警告窗A(0)是id“edu”元素的第一个子节点。首先你的<select>与<option>之间有空格,因此这里有一个空白节点,IE下没有,其他浏览器都不会忽略这个空白节点,这点是第二。

  4. 你想取得第一个子节点,实际上有一个空白节点,应该是第二个节点value="博士"的这个<option>的文本,因此你使用了value,应该使用nodeValue才对。还有一个问题在于文本节点本身是元素节点的子节点。也就是A[1].firstchild.nodeValue

  5. 最后你需要继续加油,哈哈。

查看完整回答
3 反对 回复 2016-10-12
?
stone310

TA贡献361条经验 获得超191个赞

首先是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]



查看完整回答
2 反对 回复 2016-10-11
?
执着的前端

TA贡献4条经验 获得超3个赞

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

查看完整回答
反对 回复 2016-10-11
?
慕粉3696722

TA贡献1条经验 获得超0个赞


首先应该是 var A=gra.childNodes;

其次A返回的是一个nodeList,里面有9个节点,而第一个是文本节点(<TextNode textContent="\n\n">)

弹出的肯定是undefined。所以可以根据nodetype来选择你想要的

查看完整回答
反对 回复 2016-10-11
?
输输输

TA贡献22条经验 获得超21个赞

因为 

A is undefined


查看完整回答
反对 回复 2016-10-11
  • 6 回答
  • 2 关注
  • 2252 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信