相关疑难解决方法(0)

我可以将整个HTML文档加载到Internet Explorer中的文档片段中吗?

这是我一直遇到的一些困难.我有一个本地客户端脚本,需要允许用户获取远程网页并搜索结果页面的表单.为了做到这一点(没有正则表达式),我需要将文档解析为完全可遍历的DOM对象.

我想强调的一些限制:

  • 我不想使用库(比如jQuery).我需要在这里做太多的臃肿.
  • 在任何情况下都不应执行远程页面中的脚本(出于安全原因).
  • getElementsByTagName需要提供DOM API等.
  • 它只需要在Internet Explorer中工作,但至少在7中工作.
  • 让我假装我无法访问服务器.我这样做,但我不能用它.

我试过的

假设我在变量中有一个完整的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>片段内的元素,仍然没有运气.

有没有人有任何想法?

html javascript internet-explorer dom

42
推荐指数
1
解决办法
2万
查看次数

使用jQuery搜索HTML字符串

如果我运行此代码 -

var html= '<html><head></head><body><div class="bar"></div></body></html>';
console.log($(html).find('div'));
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码,我没有返回任何结果 -

var html= '<html><head></head><body><div><div class="bar"></div></div></body></html>';
console.log($(html).find('div'));
Run Code Online (Sandbox Code Playgroud)

然后我得到一个返回的结果 - 内部div(<div class="bar"></div>).我原本期望第一个代码片段返回单个结果,第二个代码片段返回两个结果.

同样,此代码不返回任何结果 -

var code = $("<div id='foo'>1</div><div id='bar'>2</div>");
console.log(code.find('div'));
Run Code Online (Sandbox Code Playgroud)

但是这段代码警告'div'两次 -

var code = $("<div id='foo'>1</div><div id='bar'>2</div>");
code.each(function() {
    alert( this.nodeName );
})
Run Code Online (Sandbox Code Playgroud)

鉴于第二个片段的结果,我原本期望第一个代码片段返回两个结果.有人可以解释为什么我得到的结果我得到了吗?

http://jsfiddle.net/ipr101/GTCuv/

javascript jquery jquery-selectors

31
推荐指数
3
解决办法
5万
查看次数

DOM的JavaScript解析器

我们在一个项目中有一个特殊要求,我们必须通过JavaScript解析一串HTML(来自AJAX响应)客户端.多数民众赞成在PHP或Java中没有解析!我整整一周都在浏览StackOverflow并且还没有得到可接受的解决方案.

有关要求的更多细节:

  • 我们可以使用任何库(最好是dojo和/或jQuery)或者原生!

  • 我们需要解析作为字符串接收整个HTML文档,包括<head><body>.

  • 我们还需要有时将解析后的DOM结构序列化为字符串.

  • 最后,我们不希望将解析后的DOM附加到当前Document.相反,我们会将其发送回服务器以进行永久存储.

例如:我们需要类似的东西

var dom = HTMLtoDOM('<html><head><title> This is the old title. </title></head></html>');
    dom.getElementsByTagName('title')[0].innerHTML = "This is a new Title";
Run Code Online (Sandbox Code Playgroud)

根据我的研究,这些是我们的选择:

  1. 一个TinyMCE解析器.问题?我想我们需要包括一个编辑.如何解析我们不需要编辑器的HTML?

  2. John Resig的Parser.应该是我们最好的选择.不幸的是,当给出页面的全部内容时,解析器会崩溃!

  3. jQuery $(htmlString)或dojo.toDom(htmlString).双方依靠的DocumentFragment,从而吞噬<head><body>!

编辑:我们想序列化HTML,以便我们可以通过RegExp捕获某些自定义HTML Commnet.我们需要让用户有机会编辑元标记,标题标记等HTML Parser.

哦,我觉得我会在Stack Overflow中被谋杀,即使我只是暗示通过RegExp解析HTML!

javascript jquery dojo parsing html-parsing

6
推荐指数
1
解决办法
5200
查看次数