<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<p></p>
<script>
var $p = jQuery("p");
var p = $p[0];
$p.append(jQuery.hasData(p));
</script>
</body>
</html>
当我执行上面的代码时,没有显示任何内容。但当我附加空文本,如 $ p.append(jQuery.hasData(p)+&#34;&#34;); false正在页面中显示。请让我知道为什么会这样。
编辑:为了简化,我的问题是为什么$ p.append(false);没有显示任何东西,只有$ p.append(true);将段落添加为
答案 0 :(得分:1)
基本上在jquery中调用append函数时,会发生dom操作。 在dom操作期间的jquery 1.10.2中,在构建片段之前是否存在内容是否存在检查会发生,所以即使你试图将boolean值附加到段落,它也能正常工作,但是false不能满足检查要求。 / p>
答案 1 :(得分:0)
Append将字符串作为参数,因此将一个空字符串添加到Boolean将其转换为字符串,
为了使它工作,您可以将返回的布尔值转换为类似于此jQuery.hasData(p).toString()
答案 2 :(得分:0)
来自jQuery docs:
.append(content [,content])
内容类型:htmlString或Element或 数组或jQuery DOM元素,元素数组,HTML字符串或jQuery 要在匹配集合中的每个元素的末尾插入的对象 元件。
所以这样的代码:jQuery.hasData(p)
返回boolean false 这是不可接受的内容类型,所以当你添加空的char值时,它会转换为字符串并且它可以工作。
对jQuery src(来自jQuery cdn的v2.1.1)的一些调查发现:
'append'在第5194行用指定的参数调用'domManip'(在我们的例子中'true'作为boolean),然后在第5363行jQuery.buildFragment调用,其中第5070行发生了这个测试用例:
for ( ; i < l; i++ ) {
elem = elems[ i ];
if ( elem || elem === 0 ) {
其中elems包含我们的'true'作为布尔值。并且因为这种情况也是如此,在第5080行发生了具有漂亮名称context.createTextNode( elem )
的函数调用。多数民众赞成因为真实是有效而虚假不是。有帮助吗?