首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DOM的JavaScript解析器

DOM的JavaScript解析器
EN

Stack Overflow用户
提问于 2012-03-02 20:54:37
回答 5查看 6.2K关注 0票数 8

在一个项目中,我们有一个特殊的需求,在这个项目中,我们必须通过JavaScript only解析一串HTML (来自AJAX响应)客户端。没错,在中没有解析--我一直在学习StackOverflow,这一周还没有得到一个可接受的解决方案。

关于这些要求的更多细节:

  • 我们可以使用任何库(最好是dojo和/或jQuery),也可以是本地的!
  • 我们需要解析作为字符串接收的整个文档,包括<head><body>
  • 我们有时还需要将解析的DOM结构序列化为字符串。
  • 最后,我们不希望将解析的DOM附加到当前文档中,而是将其发送回服务器进行永久存储。

我们需要类似的东西

代码语言:javascript
运行
复制
var dom = HTMLtoDOM('<html><head><title> This is the old title. </title></head></html>');
    dom.getElementsByTagName('title')[0].innerHTML = "This is a new Title";

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

  1. 一个TinyMCE分析器。有问题吗?我想我们必须包括一个编辑。在不需要编辑器的情况下解析HTML怎么样?
  2. 约翰·雷西格的分析者。应该是我们最好的选择。不幸的是,当一个页面的全部内容给它时,解析器就崩溃了!
  3. jQuery $(htmlString)或dojo.toDom(htmlString)。两者都依赖DocumentFragment,因此吞噬了<head><body>

编辑:我们希望序列化,这样我们就可以通过RegExp捕获某些自定义HTML。我们需要给用户编辑元标签,标题标签等的机会,因此HTML分析器。

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-03-02 21:26:26

您可以利用当前文档,而无需向其添加任何节点。

试着做这样的事情:

代码语言:javascript
运行
复制
function toNode(html) {
    var doc = document.createElement('html');
    doc.innerHTML = html;
    return doc;
}

var node = toNode('<html><head><title> This is the old title. </title></head></html>');

console.log(node);​

http://jsfiddle.net/6SvqA/3/

票数 11
EN

Stack Overflow用户

发布于 2012-03-02 21:00:55

我建议一个由2部分组成的解决方案,您可以读取jQuery不会为您解析的标记,然后将其余部分传递给jQuery。如果您正在寻找解析HTML结构的纯javascript解决方案,那么jQuery可能是您的最佳选择,因为它有许多内置函数来操作数据。您实际上可以将您的插件构建为一个jQuery插件,它可以通过:$.parser或类似的东西来调用。如果使用自己的函数扩展jQuery以解析数据,则还可以返回扩展的jQuery对象,该对象包含用于读取特定数据元素的函数,即使是从标头中读取,因为您可以手动解析.信息并将其存储在同一个对象中。

票数 1
EN

Stack Overflow用户

发布于 2012-03-02 21:01:30

由于HTML本质上是XML,所以可以使用jquery。

代码语言:javascript
运行
复制
var dom = $.parseXML(html);

$('title', dom).text("This is a new Title");

编辑:

如果要将其返回到字符串中,则需要使用xml插件,但我无法找到它的原始源代码,如下所示:

代码语言:javascript
运行
复制
/**
 * jQuery xml plugin
 * Converts XML node(s) to string 
 *
 * Copyright (c) 2009 Radim Svoboda
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * @author  Radim Svoboda, user Zzzzzz
 * @version 1.0.0
 */


/**
 * Converts XML node(s) to string using web-browser features.
 * Similar to .html() with HTML nodes 
 * This method is READ-ONLY.
 *  
 * @param all set to TRUE (1,"all",etc.) process all elements,
 * otherwise process content of the first matched element 
 *  
 * @return string obtained from XML node(s)  
 */         
jQuery.fn.xml = function(all) {

  //result to return
  var s = "";

   //Anything to process ?
   if( this.length )

    //"object" with nodes to convert to string  
   (
      ( ( typeof all != 'undefined' ) && all ) ?
      //all the nodes 
      this 
      :
      //content of the first matched element 
      jQuery(this[0]).contents()
    )
   //convert node(s) to string  
   .each(function(){
    s += window.ActiveXObject ?//==  IE browser ?
       //for IE
         this.xml
         :
         //for other browsers
         (new XMLSerializer()).serializeToString(this)
         ;
  }); 


  return    s;      

  };
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9540218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档