代码:
<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
,另一方面应返回此值。
我不知道如何结合它。
答案 0 :(得分:1)
您尝试做的是不可能的,函数只能返回一个值。
如果您也查看了jQuery流畅的API,那么您无法使用getter version of .html()
执行您要执行的操作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。 现在,如果您将结果用作字符串,它将保留为字符串,尽管您将这样做 归还这个“
决定存在