在一个项目中,我们有一个特殊的需求,在这个项目中,我们必须通过JavaScript only解析一串HTML (来自AJAX响应)客户端。没错,在或中没有解析--我一直在学习StackOverflow,这一周还没有得到一个可接受的解决方案。
关于这些要求的更多细节:
<head>和<body>。我们需要类似的东西
var dom = HTMLtoDOM('<html><head><title> This is the old title. </title></head></html>');
dom.getElementsByTagName('title')[0].innerHTML = "This is a new Title";根据我的研究,这些都是我们的选择:
<head>和<body>!编辑:我们希望序列化,这样我们就可以通过RegExp捕获某些自定义HTML。我们需要给用户编辑元标签,标题标签等的机会,因此HTML分析器。
哦,我觉得我会在堆栈溢出中被谋杀,即使我只是暗示通过RegExp解析HTML!
发布于 2012-03-02 21:26:26
您可以利用当前文档,而无需向其添加任何节点。
试着做这样的事情:
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/
发布于 2012-03-02 21:00:55
我建议一个由2部分组成的解决方案,您可以读取jQuery不会为您解析的标记,然后将其余部分传递给jQuery。如果您正在寻找解析HTML结构的纯javascript解决方案,那么jQuery可能是您的最佳选择,因为它有许多内置函数来操作数据。您实际上可以将您的插件构建为一个jQuery插件,它可以通过:$.parser或类似的东西来调用。如果使用自己的函数扩展jQuery以解析数据,则还可以返回扩展的jQuery对象,该对象包含用于读取特定数据元素的函数,即使是从标头中读取,因为您可以手动解析.信息并将其存储在同一个对象中。
发布于 2012-03-02 21:01:30
由于HTML本质上是XML,所以可以使用jquery。
var dom = $.parseXML(html);
$('title', dom).text("This is a new Title");编辑:
如果要将其返回到字符串中,则需要使用xml插件,但我无法找到它的原始源代码,如下所示:
/**
* 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;
};https://stackoverflow.com/questions/9540218
复制相似问题