为什么jQuery.html()成功地接受了jQuery对象,尽管文档说它可以';T

为什么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

我只是想确切地理解它是如何工作的,因为我的代码中有一个可能与我的误解有关的bug

假设
.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;
}