日期:2014-05-16  浏览次数:20498 次

初学者JavaScript征途一书中的代码,有一点不解,请高手指点,内贴有代码

完整代码已贴出,问题就在里面
var HTMLElePrototype = {
    extend: function ( name, fn ) {
        var _getEleById = document.getElementById;
        document.getElementById = function ( id ) {
            var _ele = _getEleById.apply( document, [id] );
            eval( "_ele." + name + "=fn" );
            return _ele;
        }
    }
}
HTMLElePrototype.extend( "myPreviousSibling", function () {
    var e = this.previousSibling;
    while ( e && e.nodeTpye != 1 ) {
        //我添加了e.nodeType的监视,发现这伙居然有两个值 如下.
        //Name              Value                 Type
      //e.nodeType        1                   Number
      //e.nodeType        undefined       Undefined

        e = e.previousSibling;
      //这就是我上面判断失败的原因.为什么,我可从来没在C#里见过一个变量同时有两个值
        //请高手解释下为什么

    }
    return e;
} );

window.onload = function x() {
    var pr = document.getElementById( "p1" ).myPreviousSibling();
    lalert( pr );
}
<body>   
    <p>p</p>
    <p>p</p>
    <p id="p1">p1</p>
    <p>p</p></body>

------解决方案--------------------
一个dom的nextSibling或者previousSibling在你不同浏览器里得到的元素也不一定相同
有些浏览器获得的是一个空白元素 而有些不是
所以需要循环
------解决方案--------------------
引用:
一个dom的nextSibling或者previousSibling在你不同浏览器里得到的元素也不一定相同
有些浏览器获得的是一个空白元素 而有些不是
所以需要循环

------解决方案--------------------
 while ( e && e.nodeTpye != 1 ) {