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

JS关于函数的问题,

9-11章 访问兄弟节点,断断续续弄了好几天没搞懂,有几个点,需要大家解惑

 function fn(a){
        var x=1;
         while (x && x.nodeType!=1){
            x=3;
          }
        return x;
                }
    fn(4);

这段代码,和下面的代码,

function get_nextSibling(n){

        var a=n.nextSibling;

        while (a && a.nodeType!=1){

           a=a.nextSibling;

        }

        return a;

    }

如果把获取兄弟节点改成number数字,来写的话, 1、第一段代码中的运行原理和第二段相同么。2、第一段代码运行不了,服务器崩溃,问题出在哪里。3  

var x=1;
         while (x && x.nodeType!=1){
            x=3;
          }
        return x;

  var a=n.nextSibling;

        while (a && a.nodeType!=1){

           a=a.nextSibling;

        }

        return a;

中,已经申明了局部函数,并进行了初始化 赋值,那while里的   x=3;和a=a.nextSibling;又是什么意思 ,我觉得 应该是执行while循环,如果条件成立,那么将变量 重新赋值,但是,第一种 运行不了,第二种我还没看懂。求各位大大科普

正在回答

2 回答

ok.

0 回复 有任何疑惑可以回复我~

第一段代码你给x赋值之后他不就是文本节点了么,总之肯定不是元素节点,所以x的nodeType肯定不是1,那么只要x不是0,这个循环就会永远持续下去,而事实上他也确实不会为0,这是一个死循环;

第二段代码段的意义是为了找出n的下一个元素节点。默认传入的参数n是一个节点,那么进来之后先将n的下一个节点赋给a,而n的下一个节点a可能是属性、可能是文本、也可能是元素,还可能是空的,这就需要进入循环进行判断找出下一个元素节点。a&&a.nodetype!=1是指,如果a不为空且a的节点类型不为1时,进入循环(元素节点的节点类型才是1),一直往下循环,直至找到一个元素节点,并将其作为返回值。

这一段基础内容在9-7章,需要好好看一下。

0 回复 有任何疑惑可以回复我~
#1

慕粉3361053 提问者

有点没理解上面的话 var x=1;while(x && x.nodeType!=1) 按照我的思路 申明变量x 初始化赋值为1,循环,执行条件 ,(x&&x.nodeType!=1) x和x的节点类型不等价于1时, 变量x重新初始化赋值为3 ,x=3;。 如上面所说,x.nodeType,是文本节点类型,type为3,那么 (x && x.nodeType!=1) ,是(1和3不等价于1)条件不成立,因为(1=1)了,是因为这个问题才出现死循环吗?
2016-08-24 回复 有任何疑惑可以回复我~
#2

慕粉3361053 提问者

a&&a.nodetype!=1是指,如果a不为空且a的节点类型不为1时,进入循环(元素节点的节点类型才是1),一直往下循环,直至找到一个元素节点,并将其作为返回值。 a.nodetype!=1 我明白, a!=1为什么是不为空, 这个不为空和!=1有什么关联; 还有个疑问,(n的下一个节点a可能是属性、可能是文本、也可能是元素,还可能是空的,)这句话, n的下一节点不是元素、就是空节点 和文本节点,我没见过属性的,他是什么样的。
2016-08-24 回复 有任何疑惑可以回复我~
#3

Sergio7 回复 慕粉3361053 提问者

因为n可能是最后一个节点,后面没有节点了,那么通过nextSibling方法就会返回null。 属性节点就像class,href这样的在标签后面这种,在DOM中也是节点。另外你好像把a&&a.nodeType!=1的运算顺序弄错了,是先分别判断a和a,nodeType!=1的真假,再进行&&的真假判断。
2016-08-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468188    人
  • 解答问题       21891    个

本课程从如何插入JS代码开始,带您进入网页动态交互世界

进入课程

JS关于函数的问题,

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信