为什么jQuery.html()成功地接受了jQuery对象,尽管文档说它可以';T
我只是想确切地理解它是如何工作的,因为我的代码中有一个可能与我的误解有关的bug 假设为什么jQuery.html()成功地接受了jQuery对象,尽管文档说它可以';T,jquery,Jquery,我只是想确切地理解它是如何工作的,因为我的代码中有一个可能与我的误解有关的bug 假设.html(htmlString)的htmlString参数可以是htmlString或函数,但是如果我这样做的话 var $div = $("div").detach(); $("body").html($div); 即使$div是jQuery对象,分离的div也会正确地替换主体内容 为了完整起见,我的完整代码如下 <html> <body style="font-size:25px"&g
.html(htmlString)
的htmlString
参数可以是htmlString
或函数,但是如果我这样做的话
var $div = $("div").detach();
$("body").html($div);
即使$div
是jQuery对象,分离的div也会正确地替换主体内容
为了完整起见,我的完整代码如下
<html>
<body style="font-size:25px">
<div><p> CLICK TO TEST </p></div>
<script src="/js/jquery-1.11.1.min.js"></script>
<script>
$(function() {
$("p").click(function() { console.log("P1 CLICKED!"); });
var $div = $("div").detach();
$("body").html($div);
//$("body").html($div);
});
</script>
</body>
</html>
点击测试
$(函数(){
$(“p”).click(function(){console.log(“P1 CLICKED!”);});
var$div=$(“div”).detach();
$(“body”).html($div);
//$(“body”).html($div);
});
谢谢 我认为这是因为jquery对象扩展了jquery函数,该函数充当“$”对象的原型。所以它可以被识别为一个函数。另外,每个javascript对象“都是”一个函数,正如我在评论中所说的,我们无法回答您的直接问题,因为我们不是编写文档的人,但我可以向您展示它工作的原因
正如您在上所看到的,jQuery检查传递的值是否为字符串。如果是,它会进行一些替换以生成有效的HTML,然后
所以不管你把什么当作论点:
正如您所知,.append()
接受字符串、DOM元素或jQuery对象。因此,这就是它起作用的原因.html
不会真正检查参数是否是字符串。简而言之,如果不是字符串或函数,它会将传递的参数转发给jQuery.fn.append
,后者接受DOM或jQuery对象,这就是代码工作的原因
为了清晰起见,这里是该函数的缩小版本
html: function( value ) {
if ( value === undefined ) {
...
} else if ( typeof value === "string" && ..... ) {
...
} else if ( jQuery.isFunction( value ) ) {
...
} else {
this.empty().append( value );
}
return this;
}
这个问题应该问jQuery团队,而不是一些随机的网民帮助其他随机的网民啊哈!为什么它说它必须是字符串或函数?这一点,我们没有答案。@Karl AndréGagnon谢谢你的评论,但Stack Overflow是一个Wiki,意思是一旦问题被问到并回答了,其他人就可以很快找到它,而不必再问了。我听说过“每个函数都是javascript对象”,但“每个javascript对象都是函数”对我来说是新的…?var x=$(“”);x()代码>您将得到一个错误:object不是函数谢谢,但是根据文档,必需的函数必须返回一个字符串,而jQuery对象肯定不是吗?@Karl AndréGagnon抱歉,我错卖了那个部分。我的意思是js函数是一个函数对象谢谢你的时间。我学到的是,有时你必须阅读资料来源。:)
html: function( value ) {
if ( value === undefined ) {
...
} else if ( typeof value === "string" && ..... ) {
...
} else if ( jQuery.isFunction( value ) ) {
...
} else {
this.empty().append( value );
}
return this;
}