Javascript 获取两个元素之间的所有html

Javascript 获取两个元素之间的所有html,javascript,jquery,c#-3.0,Javascript,Jquery,C# 3.0,问题: 提取两个标题之间的所有html,包括html标题。标题文本是已知的,但格式、标记名等是未知的。它们不在同一个父项中,并且可能(几乎可以肯定)在它自己的子项中有子项) 澄清:标题可以位于或或任何其他标记内。它们也可能被、、或更多标签包围。关键是:元素中唯一的文本是标题文本 我可用的工具有:利用WebBrowser控件的C#3.0,或Jquery/Js 我采用了Jquery路线,遍历DOM,但我遇到了子对象的问题,并适当地添加了它们。以下是迄今为止的代码: function getAllBe

问题:
提取两个标题之间的所有html,包括html标题。标题文本是已知的,但格式、标记名等是未知的。它们不在同一个父项中,并且可能(几乎可以肯定)在它自己的子项中有子项)

澄清:标题可以位于
或任何其他标记内。它们也可能被
或更多
标签包围。关键是:元素中唯一的文本是标题文本

我可用的工具有:利用WebBrowser控件的C#3.0,或Jquery/Js

我采用了Jquery路线,遍历DOM,但我遇到了子对象的问题,并适当地添加了它们。以下是迄今为止的代码:

function getAllBetween(firstEl,lastEl) {
    var collection = new Array(); // Collection of Elements
    var fefound =false;
    $('body').find('*').each(function(){
        var curEl = $(this);
        if($(curEl).text() == firstEl) 
            fefound=true;
        if($(curEl).text() == lastEl) 
            return false;

        // need something to add children children
        // otherwise we get <table></table><tbody></tbody><tr></tr> etc
        if (fefound)
            collection.push(curEl);
    });
    var div = document.createElement("DIV");
    for (var i=0,len=collection.length;i<len;i++){
        $(div).append(collection[i]);
    }
    return($(div).html());
}
函数getAllBetween(firstEl,lastEl){ var collection=new Array();//元素集合 var fefound=false; $('body')。查找('*')。每个(函数(){ var curEl=$(本); if($(curEl).text()==firstEl) fefound=true; if($(curEl).text()==lastEl) 返回false; //需要一些东西来添加儿童 //否则我们会等 如果(fefound) 收集、推(治疗); }); var div=document.createElement(“div”);
对于(var i=0,len=collection.length;i我的思想是一个正则表达式,类似于

.*<(?<tag>.+)>Start</\1>(?<found_data>.+)<\1>End</\1>.*
*开始(?.+)结束*
应该可以获得起始和结束div标记之间的所有内容。

这里有一个想法:

$(function() {
      // Get the parent div start is in:
    var $elie = $("div:contains(Start)").eq(0), htmlArr = [];

      // Push HTML of that div to the HTML array
    htmlArr.push($('<div>').append( $elie.clone() ).html());

      // Keep moving along and  adding to array until we hit END
    while($elie.find("div:contains(End)").length != 1) {
        $elie = $elie.next();       
        htmlArr.push($('<div>').append( $elie.clone() ).html());
    };

      // htmlArr now has the HTML
      // let's see what it is:
    alert(htmlArr.join(""));
});​
$(函数(){
//获取父div的起始位置为:
var$elie=$(“div:contains(Start)”).eq(0),htmlar=[];
//将该div的HTML推送到HTML数组中
htmlArr.push($('').append($elie.clone()).html());
//继续前进并添加到阵列中,直到到达终点
while($elie.find(“div:contains(End)”).length!=1){
$elie=$elie.next();
htmlArr.push($('').append($elie.clone()).html());
};
//htmlArr现在有了HTML
//让我们看看它是什么:
警报(htmlar.join(“”);
});​


这将获取
start
所在的整个父级
div
。但我不确定这是否是您想要的。outerHTML由
$(“”)完成。append(element.clone()).html()
,因为outerHTML还不支持跨浏览器。所有html都存储在一个数组中,您也可以只将元素存储在数组中。

我很困惑您想做什么。您想提取已知元素的所有html,但该元素的内容未知?innerHTML/html()如何..?由
.InnerText
标识的两个元素之间的所有HTML,但我不知道,也不控制它们之间的内容或任何其他部分。很抱歉,我需要澄清一下我的问题…关于使用正则表达式,标题是其HTML元素中唯一的文本。我估计如果“开始”,使用正则表达式将失败和“结束”在文档的其他部分。文档的其他部分?正则表达式不关心模式在哪里。如果有下面的开始部分…正则表达式不会挂接到该开始吗?取决于正则表达式,我编写的一个不会挂接到该开始,但另一个正则表达式可以。我编写的一个需要开始作为开始标记,如果需要,某些东西可以硬编码为“div”。灵活性是正则表达式的优点之一,不幸的是可读性不好。标记这一点是正确的,因为它会引导我走上正确的道路。基本上,我使用我的原始代码来查找开始/结束标记名,并给它们一个唯一的ID。然后我使用这些变量采用了这个答案正则表达式。
$(function() {
      // Get the parent div start is in:
    var $elie = $("div:contains(Start)").eq(0), htmlArr = [];

      // Push HTML of that div to the HTML array
    htmlArr.push($('<div>').append( $elie.clone() ).html());

      // Keep moving along and  adding to array until we hit END
    while($elie.find("div:contains(End)").length != 1) {
        $elie = $elie.next();       
        htmlArr.push($('<div>').append( $elie.clone() ).html());
    };

      // htmlArr now has the HTML
      // let's see what it is:
    alert(htmlArr.join(""));
});​