2014-09-22 114 views
0
<!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)+“”);错误显示在页面中。请让我知道为什么这是这样的行为。hasData无法附加到段落

编辑:为了简化,我的问题是为什么$ p.append(false);除了$ p.append(true)之外没有显示任何内容;被追加真正的段落

+0

是的,它似乎追加布尔值假,不会显示在页面上http://jsfiddle.net/y1fsn3p6/但如果你追加true它会显示出来。但是当你添加空字符串时,肯定会显示它,因为它会将其转换为字符串 – Huangism 2014-09-22 18:42:50

+0

谢谢黄璜。这非常有用。 – user2833192 2014-09-22 19:07:31

回答

0

append接受一个字符串,因此增加一个空字符串布尔一个说法把它转换成字符串, 使它工作,你可以转换布尔返回一个字符串这样jQuery.hasData(p).toString()

0

从jQuery的docs

.append(内容[,内容])

内容类型:htmlString或元素或 Array或jQuery的DOM元素,元件的阵列,HTML STR ing或jQuery 要插入到匹配的 元素集中的每个元素末尾的对象。

所以这样的代码:jQuery.hasData(p)返回布尔这是不一样的内容类型可以接受的,所以当你添加空char值将其转换为字符串,并将其工作。

jQuery的SRC的一些调查(从jQuery的cdn V2.1.1)发现这一点:

'追加' 在行5194调用 'domManip' 与指定的参数(在本例中 '真' 布尔)然后在5363线称为jQuery.buildFragment,其中在5070线发生这个测试用例:

for (; i < l; i++) { 
    elem = elems[ i ]; 

    if (elem || elem === 0) { 

其中elems的包含了我们的“真”的布尔值。而且这种情况也是如此,在5080行发生函数调用,好名字context.createTextNode(elem)。那是因为真实是有效的,而假不是。它有帮助吗?

+0

如果错误是不可接受的,那么也是不可接受的。通过执行下面的两行 jQuery.data(p,“text”,“first”); $ p.append(jQuery.hasData(p)); 我能够得到** true **作为输出 – user2833192 2014-09-22 18:51:21

+0

@ user2833192更新了一些内部jQuery细节的答案。 – aleha 2014-09-22 20:01:09

1

基本上在jquery中调用append函数时,会发生dom操作。 在dom操作期间,在构建片段之前,在构建片段内容是否存在或者不会检查会发生,因此即使您试图将布尔值附加到段落,它仍然工作正常,但false不满足检查。