hasData无法附加到段落

时间:2014-09-22 18:38:02

标签: javascript jquery

<!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);将段落添加为

3 个答案:

答案 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 )的函数调用。多数民众赞成因为真实是有效而虚假不是。有帮助吗?