Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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 获取HTML到子元素_Javascript_Jquery_Html - Fatal编程技术网

Javascript 获取HTML到子元素

Javascript 获取HTML到子元素,javascript,jquery,html,Javascript,Jquery,Html,有没有一种方法可以获取元素的HTML字符串或文档片段,直到某个元素 例如,假设我有以下HTML <div id="blocks"> <div class="block"> <div> <ul> <li id="target">Some List Item</li> <li>Some Other List

有没有一种方法可以获取元素的HTML字符串或
文档片段
,直到某个元素

例如,假设我有以下HTML

<div id="blocks">
    <div class="block">
        <div>
            <ul>
                <li id="target">Some List Item</li>
                <li>Some Other List Item</li>
            </ul>
        </div>
    </div>
</div>
并获取一个HTML字符串,如:

<div>
    <ul>
         <li id="target">Some List Item</li>
    </ul>
</div>

  • 某些列表项
注意结果HTML中只有一个列表项

我想获取
.block
元素的所有HTML,直到
#target
元素

谢谢

//clone the original `.block` and get it's `#target`.
var cloned = $('#target').closest('.block').clone().find('#target');
var temp;
//go up the cloned parents and remove child that is not in the path of `#target`
while(true){
    temp = cloned.parent();
    var flag = false;
    temp.children().each(function(i, el){
        if(flag)
            $(el).remove();
        if($(el).is(cloned))
            flag = true;
    });
    if(cloned.is('.block')) break;
    cloned = temp;
}
在此之后,
cloned.html()
就是您所需要的。 看小提琴:

请注意,与此处建议的其他解决方案相比,这不会改变原始HTML。

更新:

将父级克隆到“.block”并删除“#target”的同级

查看工作代码,网址为:

试试这个

$('div.block').not('#target').remove()


这是一个完全不同的问题;我不认为这是一个可能的重复,你可以发布你期望的HTML结果。我仍然不知道你在问什么。@Felix看到我的问题了,我已经更新了它使它更清晰了。我不能这样做,HTML可能会有很大的变化。我知道的唯一不变的事情是我需要将HTML升级到哪个元素。$(“#target”).parentsUntil(“.block”);只要试过,它就会得到
元素的HTML忽略父元素直到一个。请参阅更新的解决方案。这将删除所有不是
#target
的子元素。HTML会有很大的不同。@MichaelBates那么您需要什么请正确指定。请看这里:它几乎可以工作了!但是它去掉了一些不起作用的元素。看这里,测试不在列表中,但应该在列表中。检查这个版本。如果这不是预期的答案,请提供此输入HTML的预期答案
var newBlock = $('#target').parents("div.block").clone();
newBlock.find('#target').siblings().remove();
$('div.block').not('#target').remove()
$('.block #target').nextAll().remove();