Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:div和tbody之间的find行为不一致_Javascript_Jquery_Html_Css_Selector - Fatal编程技术网

Javascript jQuery:div和tbody之间的find行为不一致

Javascript jQuery:div和tbody之间的find行为不一致,javascript,jquery,html,css,selector,Javascript,Jquery,Html,Css,Selector,我在jqueryby Id中使用find选择器。在divvstbody的情况下,它的行为不同。这是一个更大的问题-为了清楚起见,这里是我的原始版本的简化版本 HTML <div id='iamdiv'>HELLO</div> <table> <tbody id='iamtbody'> <tr><td>HELLO TOO</td></tr> </tbody> </tab

我在jqueryby Id中使用
find
选择器。在
div
vs
tbody
的情况下,它的行为不同。这是一个更大的问题-为了清楚起见,这里是我的原始版本的简化版本

HTML

<div id='iamdiv'>HELLO</div>
<table>
  <tbody id='iamtbody'>
    <tr><td>HELLO TOO</td></tr>
  </tbody>
</table>
<input type='text' id='div'/>
<input type='text' id='tbody'/>
小提琴:

我想在输入文本框中显示原始html,但是只显示
tbody
一个,而不是
div
。如果我使用
过滤器
方法而不是
查找
,那么它将用于div,而不是tbody


我的目标是为tbody和div提供一种一致的获取方法。

使用
var allcontent=$('body')
而不是
var allcontent=$($('body').html())

$(文档).ready(函数(){
var allcontent=$('body');
var$divcontent=allcontent.find('#iamdiv');
$('#div').val($divcontent.html());
var$tbodycontent=allcontent.find('iamtbody');
$('#tbody').val($tbodycontent.html());
});
输入{
宽度:100%;/*仅显示整个内容*/
}

你好
你好

两个问题:

  • find
    查找子元素,但
    #iamdiv
    allcontents
    jQuery对象中的顶级条目

  • 您正在复制中的元素

    var allcontent = $($('body').html());
    
    我很确定这不是你想做的。(您说过这是故意的,是为了模拟从其他地方解析HTML。)

  • 您说过,您的目标是在两种用例中都使用
    find
    (而不是在一种用例中使用
    filter
    ,在另一种用例中使用
    find
    )。要做到这一点,您需要将其他内容作为
    allcontent
    的根

    你也说过,出于某种原因,你不能改变

    var allcontent = $($('body').html());
    
    排队,甚至只是为了

    var allcontent = $("<body>").append($('body').html());
    
    var allcontent=$(“”)。追加($('body').html());
    
    没关系,您仍然可以通过在后面添加一行来添加新的根元素,如下所示:

    allcontent = $("<body>").append(allcontent);
    
    allcontent=$(“”)。追加(allcontent);
    
    实例:

    $(文档).ready(函数(){
    var allcontent=$($(($).html());//您说过我们无法更改此值
    //添加的行:
    allcontent=$(“”)。追加(allcontent);
    var$divcontent=allcontent.find('#iamdiv');
    $('#div').val($divcontent.html());
    var$tbodycontent=allcontent.find('iamtbody');
    $('#tbody').val($tbodycontent.html());
    });
    
    
    你好
    你好
    
    var allcontent
    错误。它应该是
    var allcontent=$('body')
    @我故意这么做,因为我需要解析字符串的HTML版本。如果我只做
    $('body')
    我已经知道它是有效的。我想解析一个字符串,但仍然解决了这个问题。您可以创建一个伪元素来实现这一点。。。类似于这样的情况:我故意使用$($('body').html())来模拟解析html字符串的示例。@bragboy:这将是问题中包含的有用信息。@bragboy:幸运的是,我允许您在我的答案中使用这一行。:-)检查更新的答案,更新后的问题@HimanshuTyagi OP要求一种方法来获取两种元素,而不是两种不同的方法。我不知道为什么..这篇文章
    var allcontent=$($('body').html())
    是非常有意的,因为我使用相同的HTML作为源代码来指示我要解析的内容。我不能在这里附加body标签(就像我原来的问题一样,我正在实现一个无限滚动特性)。不触及这条线,还有其他解决办法吗?@bragboy:我不明白你为什么不能改变这条线。当然,只需在下一行添加以下内容:
    allcontent=$(“”)。append(allcontent)
    allcontent = $("<body>").append(allcontent);