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(""));
});