这是我一直遇到的一些困难.我有一个本地客户端脚本,需要允许用户获取远程网页并搜索结果页面的表单.为了做到这一点(没有正则表达式),我需要将文档解析为完全可遍历的DOM对象.
我想强调的一些限制:
getElementsByTagName需要提供DOM API等.假设我在变量中有一个完整的HTML文档字符串(包括DOCTYPE声明)html,这是我到目前为止所尝试的:
var frag = document.createDocumentFragment(),
div = frag.appendChild(document.createElement("div"));
div.outerHTML = html;
//-> results in an empty fragment
div.insertAdjacentHTML("afterEnd", html);
//-> HTML is not added to the fragment
div.innerHTML = html;
//-> Error (expected, but I tried it anyway)
var doc = new ActiveXObject("htmlfile");
doc.write(html);
doc.close();
//-> JavaScript executes
Run Code Online (Sandbox Code Playgroud)
我也尝试从HTML中提取<head>和<body>节点,并将它们添加到<HTML>片段内的元素,仍然没有运气.
有没有人有任何想法?
我正在寻找一个正则表达式语句,让我从XHTML文档的body标签之间提取HTML内容.
我需要解析的XHTML将是非常简单的文件,例如,我不必担心JavaScript内容或<![CDATA[标签.
下面是我要解析的HTML文件的预期结构.由于我完全知道我将要使用的HTML文件的所有内容,因此这个HTML代码段几乎涵盖了我的整个用例.如果我能得到一个正则表达式来提取这个例子的主体,我会很高兴.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
</title>
</head>
<body contenteditable="true">
<p>
Example paragraph content
</p>
<p>
</p>
<p>
<br />
</p>
<h1>Header 1</h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
从概念上讲,我一直在尝试构建一个匹配内部正文内容的所有正则表达式字符串.有了这个,我会使用C#Regex.Split()方法来获取正文内容.我以为这个正则表达式:
((.|\n)*<body (.)*>)|((</body>(*|\n)*)
Run Code Online (Sandbox Code Playgroud)
...会有所作为,但它似乎与我在RegexBuddy中的测试内容完全无关.
我正在进行ajax调用以获取内容并附加此内容,如下所示:
$(function(){
var site = $('input').val();
$.get('file.php', { site:site }, function(data){
mas = $(data).find('a');
mas.map(function(elem, index) {
divs = $(this).html();
$('#result').append('' + divs + '');
})
}, 'html');
});
Run Code Online (Sandbox Code Playgroud)
问题是,当我改变时a,body我什么也得不到(没有错误,只是没有HTML).我假设身体是一个像'a'的标签?我究竟做错了什么?
这对我有用:
mas = $(data).find('a');
Run Code Online (Sandbox Code Playgroud)
但这不是:
mas = $(data).find('body');
Run Code Online (Sandbox Code Playgroud)