我的链作为jQuery

时间:2014-11-13 06:29:33

标签: javascript jquery

代码:

<body>
    <div class="class0"> <a href="">link</a> </div>
    <div class="class0"></div>
    <div class="class0"></div>
</body>

<script>
    proto={};

    $ = function(selector){
        var tags = document.querySelectorAll(selector);
        tags.__proto__ = proto;
        return tags;
    }

    proto.addClass = function(className){
        for (var i = 0; i < this.length; i++){
            this[i].classList.add(className);
        }
        return this;
    }

    proto.html = function(){
        return this[0].innerHTML;
    }
</script>

console.log( $('div').addClass('class1').html() );这有效

console.log( $('div').addClass('class1').html().addClass('class 2').html() );但这不是 - 需要这个工作

一方面,

html()应返回this[0].innerHTML,另一方面应返回此值。 我不知道如何结合它。

4 个答案:

答案 0 :(得分:1)

您尝试做的是不可能的,函数只能返回一个值。

如果您也查看了jQuery流畅的API,那么您无法使用getter version of .html()

执行您要执行的操作
吸气鬼&amp; setter版本可以像

proto.html = function (html) {
    if (arguments.length == 0) {
        return this[0].innerHTML;
    }
    this[0].innerHTML = html;
    return this;
}

答案 1 :(得分:1)

html应该返回this以防它是否是一个setter函数(你还没有这个):

$('div').addClass('class1').html('<span>HTML</span>').addClass('class 2');

在您的情况下,html是一个getter函数,因此它必须为集合中的第一个元素返回HTML字符串。因此,你无法将两种风格结合起来。

答案 2 :(得分:0)

proto.html = function(str){
    if(str == undefined){
        // getter mode
        return this[0].innerHTML;
    } else {
        // setter mode
        this[0].innrHTML = str;
        return this;
    }
}

用法

$('div').html() // works as getter
$('div').html('some html').foo(); // works as setter

答案 3 :(得分:0)

任务还没有决定。

该问题的作者的评论(EPAM系统的团队负责人):

“需要在方法内重新定义这个toString。 现在,如果您将结果用作字符串,它将保留为字符串,尽管您将这样做 归还这个“

决定存在