function next(elem){
do{
elem = elem.nextSibling;
}while( elem && elem.nodeType != 1 )
return elem;
}

var o = document.getElementsByTagName('h1')[0]
alert(next(o).innerHTML)  //这样我可以 获得 h1的 next 元素的innerHTML我的问题是 怎么改 ,可以写成   o.next().innerHTML 这种样式

解决方案 »

  1.   

    object.prototype.next=function()
    {
    var d;
    do{
                        d= this.nextSibling;
                    }while( d&& d.nodeType != 1 )
                    return d;
    };
      

  2.   


    师兄 我也是这么写的,会出错的, Object.prototype = {
    next : function(){
    do{
    elem = this.nextSibling;
    }while(elem && elem.nodeType != 1)
    return elem;
    }
    }
      

  3.   


    回楼主,不能给dom对象增加新的方法~·
    所以就不能o.next().innerHTML
      

  4.   


    那 jQuery $('test').next() 这样怎么实现的(本人入门,看jquery源码吃力。),期待高手
      

  5.   

                var o = document.getElementsByTagName('h1')[0]
    o.next = function(){
    var elem = this
                    do{
                        elem = elem.nextSibling;
                    }while( elem && elem.nodeType != 1 )
                    return elem;
                }
                alert(o.next().innerHTML)
      

  6.   


    师兄,这个方法倒是可以,但是我将它写成 var o = document.getElementsByTagName('h1')[0]

    Object.prototype.next = function(){
    var elem = this;
                    do{
                        elem = elem.nextSibling;
                    }while( elem && elem.nodeType != 1 )
                    return elem;
    }

                alert(o.next().innerHTML)就只能在标准DOM中运行,IE6运行不鸟
      

  7.   


    var o = document.getElementsByTagName('h1')[0]

    alert(o instanceof Object) //ie下 为false ,ff下为true,所以next方法在ie下无效。怎么能达到兼容?
      

  8.   

    请参考下jquery的源代码基本就是你要的实现方式
      

  9.   

    function $(id) {
                this.o = document.getElementById(id);
                this.next = function() {
                    var elem = this.o;
                    do {
                        elem = elem.nextSibling;
                    } while (elem && elem.nodeType != 1)
                    return elem;
                }
            }
      

  10.   


    不好意思,少写了一句:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>Untitled Page</title>
    </head>
    <body>    
        <div id="div1"></div>
        <div id="div2">aaa</div>
        <script type="text/javascript">
            function $(id) {
                this.o = document.getElementById(id);
                this.next = function() {
                    var elem = this.o;
                    do {
                        elem = elem.nextSibling;
                    } while (elem && elem.nodeType != 1)
                    return elem;
                }
                return this;
            }        alert($("div1").next().innerHTML);
            
            // 结果:aaa
        </script>
    </body>
    </html>
      

  11.   


    首先 感谢这位师兄但是 你这样有些牵强吧,完全是为了 达到 $('test').next()... 的格式 而这样写。不太灵活啊
      

  12.   

    首先,你要对你操作的对象包装,这样的话,才能像jquery这样的控制。其实他也是对dom的包装。function $(id){
       var obj = new $obj(document.getElementById(id));
       return obj;
    }
    function $obj(obj){
       this[0] = obj;
    }
    //扩展原型链上的方法。和jquery.fn上扩展是一样的。
    $obj.prototype = {
       next:function(){
         //dosomething
       },
       html:function(){
       }
    }
      

  13.   


    感谢师兄,让我看到点眉目,
    function $(id){
       var obj = new $obj(document.getElementById(id));
       return obj;
    }

    function $obj(obj){
    this[0] = obj;
    }

    $obj.prototype.next = function(){
    return 123;

    }
    alert($('test').innerHTML) //这里为什么 对象没能实例成功呢?需要 在$obj 里 return obj才可以,但是这样的话 $obj 的next方法又无效了                  alert($('test').next()) // alert 123
    有些 迷糊,,,,
      

  14.   

    这个innerHTML其实不是 $(id)返回对象拥有的方法,你可以代理下dom的innerHTML,html:function(){
       return this[0].innerHTML;
    }如果你直接调用jquery的innerHTML也是报错,和这个是一样的道理。
     
      

  15.   

    仿jQuery的写法,楼主参考<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    </head>
    <body>
    <div id="myId">111</div>
    <script type="text/javascript">    (function (window) {
            var jQuery = function (selector) {
                return jQuery.fn.init(selector);
            }
            jQuery.fn = jQuery.prototype = {
                init: function (selector, context) {
                    //如果选择器是 id选择器
                    var elem = document.getElementById(selector);
                    if (elem) {
                        this.length = 1;
                        this[0] = elem;
                    }
                    this.selector = selector;                
                    return this;
                },
                next: function () {
                    alert(this[0].innerHTML);
                }
            };        window.$ = jQuery;
        })(window)    //调用
        $('myId').next();</script>
    </body>
    </html>
      

  16.   


    师兄,学习了,但是 我这样写 41行出错。
    $("test").next().html is not a function<!doctype html>
    <html>
    <head>
    </head>
    <body>
    <h1>h1</h1>
    <h2 id="test">h2</h2>
    <h3>h3</h3>
    <script>
    (function(){
    var jQuery = function(selector){
    return jQuery.fn.init(selector);
    }

    jQuery.fn = jQuery.prototype = {
    init : function(selector){
    var elem = document.getElementById(selector);
    if( elem ){
    this[0] = elem;
    }
    return this
    },
    html : function(){
    return this[0].innerHTML;
    },
    next : function(){
    var elem = this[0];
    do{
    elem = elem.nextSibling;
    }while( elem && elem.nodeType != 1)
    return elem;
    }
    }
    window.$ = jQuery;
    })()

    alert( $('test').next().html() )

    </script>
    </body>
    </html>
      

  17.   

    不用等了,ie的 dom你扩展不了的,只能写个库 类似jquery还有 在 ff等标准浏览器下面   你要扩展也别在 Object构造函数下扩展可以对 HTMLElement扩展
    如 
    HTMLElement.prototype.next = function(){}
      

  18.   

    少了一句: jQuery.fn.init.prototype = jQuery.fn;
      

  19.   


    我觉得你写的有点问题。
    next返回的对吗?
                            next : function(){
                            var elem = this[0];
                            do{
                                elem = elem.nextSibling;
                            }while( elem && elem.nodeType != 1)
                            return elem;
                        }
    我更改后:                       next : function(){
                            var elem = this[0];
                            do{
                                elem = elem.nextSibling;
                            }while( elem && elem.nodeType != 1)
    this[0]=elem;
                            return this;
                        }
    我回帖时为什么没有工具栏了?代码就只能这样发了
      

  20.   

    $(DOM)和DOM的区别在于 封装起来了。HTMLElement.prototype.next = function() {
       var elem = this;
       do {
          elem = elem.nextSibling;
       } while(elem && elem.nodeType != 1);
       return elem;
    }这个方法IE不支持。于是乎需要模拟一下IE下的HTMLElement
    网上到处都是,
    我给你看个demo
    var DOMElement ={
        extend: function(name,fn){//添加名称为name的方法fn
        
            if(!document.all)//除了ie而外的浏览器都能够访问到HTMLElement这个类
                eval("HTMLElement.prototype." + name + " = fn");
            else{
                //    IE中不能访问HTMLElement这个类
                //    为了达到同样的目的,必须重写下面几个函数
                //    document.createElement
                //    document.getElementById
                //    document.getElementsByTagName
                //    这几个函数都是获得HTML元素的方法
                //    修改这些方法,使得通过这些方法获得的每个元素拥有名称为name的方法fn            var _createElement = document.createElement;
                document.createElement = function(tag){
                    var _elem = _createElement(tag);
                    eval("_elem." + name + " = fn");//_elem[name] = fn;也可以达到同样的目的
                    return _elem;
                }            var _getElementById = document.getElementById;
                document.getElementById = function(id){
                    var _elem = _getElementById(id);
                    eval("_elem." + name + " = fn");
                    return _elem;
                }            var _getElementsByTagName = document.getElementsByTagName;
                document.getElementsByTagName = function(tag){
                    var _arr = _getElementsByTagName(tag);
                    for(var _elem=0;_elem<_arr.length;_elem++)
                        eval("_arr[_elem]." + name + " = fn");
                    return _arr;
                }
            }
        }
    };
    //测试方法
    DOMElement.extend("contents",function(){return this.innerHTML});
      

  21.   

    上面的几个回答,this都是指向的window.............
      

  22.   


    师兄更改之后,可以使用 next 方法,
    但是 我很疑惑,                    。
                        init : function(selector){
                            var elem = document.getElementById(selector);
                            if( elem ){
                                this[0] = elem; // 这个 this[0] 保存的 elem 是怎样被$('test') 引用的,下面 明明是 return this ,这个[0] 让我很头疼
                            }
                            return this
                        }
                        。                       alert( $('test').html() )
      

  23.   


    $('test') 调用了 init方法
    init 方法中将 elem赋给this[0],返回this
    $('test')是等于this的。this[0]只是this中的一个对象
    我是这样理解的。我基础也不是很好。this[0]这种写法我也是第一次遇到
      

  24.   


    呵呵,我疑惑的是 
    既然 this[0] = elem
    也没见 $('test')[0] 来返回 elem 对象啊,
    怎么直接 $('test')就可以了?
      

  25.   

    可以用 $('test')[0] 返回 elem 对象,但是这样返回就没有next 、 html 方法了
    只有 jQuery 才有 next、html 方法,所以返回对象必须是jQuery
      

  26.   

    object.prototype.next=function()
    {
    var d;
    do{
     d= this.nextSibling;
     }while( d&amp;&amp; d.nodeType != 1 )
     return d;
    };
      

  27.   

    class o
    {
    public:
    next next;
    o();
    private:
    class next
    {
    public:
    void operator(){cout<<"a"<<endl;}int innerl;};
    };
      

  28.   

    elem = document.getElementById(selector);
                            if( elem ){
                                this[0] = elem;
                            }
                            return this
                        },
                        html : function(){
                            return this[0].innerHTML;
                        },
                        next : function(){
                            var elem = this[0];
                            do{
                                elem = elem.nextSibling;
                            }while( elem && elem.nodeType != 1)
                            return elem;
                        }
      

  29.   

    elem = document.getElementById(selector);
                            if( elem ){
                                this[0] = elem;
                            }
                            return this
                        },
                        html : function(){
                            return this[0].innerHTML;
                        },
                        next : function(){
                            var elem = this[0];
                            do{
                                elem = elem.nextSibling;
                            }while( elem && elem.nodeType != 1)
                            return elem;
                        }
    sadsad
      

  30.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
     <HEAD>
      <TITLE> New Document </TITLE>
      <META NAME="Generator" CONTENT="EditPlus">
      <META NAME="Author" CONTENT="">
      <META NAME="Keywords" CONTENT="">
      <META NAME="Description" CONTENT="">  <script type="text/javascript">
    function MyElements(tagname){
    this.elem = document.getElementsByTagName(tagname)[0];
    }
    MyElements.prototype = {
    constructor : MyElements,
    next : function(){
    do{
    this.elem = this.elem.nextSibling;
    }while( this.elem && this.elem.nodeType != true )

    return this.elem;
    }
    }

    window.onload=function(){
    var elements1 = new MyElements("h1");
    alert(elements1.next().innerHTML );
    }

      </script>
     </HEAD> <BODY>
      <h1>h1</h1>
      <h1>h2</h1>
      <h1>h3</h1>
      <h1>h4</h1>
      <h1>h5</h1>
      <h1>h6</h1>
      <h1>h7</h1>
      <h1>h8</h1>
     </BODY>
    </HTML>
      

  31.   


    这个就可以实现,在IE6也是兼容的。
    javascript中所有大写开头的对象都是可以new的,唯一一个可以new的(同样可以扩展prototype链)的小写对象就是function,其他小写对象都是不可以new的。