例如在网页上运行的JavaScript代码,我们有这样的事:是否有可能从不在DOM中的html字符串获取jQuery对象?
var data = '<html>\n <body>\n I want this text ...\n </body>\n</html>';
我想使用,如果它可能至少知道获得在HTML字符串的正文文本不扔整个html字符串放入DOM并从那里选择。
例如在网页上运行的JavaScript代码,我们有这样的事:是否有可能从不在DOM中的html字符串获取jQuery对象?
var data = '<html>\n <body>\n I want this text ...\n </body>\n</html>';
我想使用,如果它可能至少知道获得在HTML字符串的正文文本不扔整个html字符串放入DOM并从那里选择。
首先,它是一个字符串:
var arbitrary = '<html><body>\nSomething<p>This</p>...</body></html>';
现在的jQuery把它变成一个未连接的DOM片段,应用其内部的.clean()
方法去除诸如额外的<html>
,<body>
等事物
var $frag = $(arbitrary);
您可以使用jQuery的功能操作这一点,即使它仍然是一个片段:
alert($frag.filter('p').get()); // says "<p>This</p>"
或课程刚刚得到的文本内容,如你的问题:
alert($frag.text()); // includes "This" in my contrived example
// along with line breaks and other text, etc
你也可以稍后将片段附加到DOM上:
$('div#something_real').append($frag);
在可能的情况下,在片段未连接时对碎片进行复杂操作通常是一种很好的策略,然后在完成后将它们滑入“真实”页面。
这个问题的正确答案,在这个确切的措辞中,是NO。
如果你写了类似var a = $("<div>test</div>")
的东西,jQuery会将该div添加到DOM,然后围绕它构造一个jQuery对象。如果你想不打扰DOM,你将不得不自己解析它。正则表达式是你的朋友。
动态地将这样的标签动态添加到隐藏的div中会不好吗?它会混淆页面吗?我知道,它绝对不会是有效的HTML,但我想我可以做这样的事情:
,然后像做 $(“#数据HTML”)HTML(); – Travis 2010-08-10 02:54:47是的,你可以做到这一点,是的,它会工作。引用“有效的HTML”在这里并不相关,因为一旦HTML被浏览器解析,它不再是HTML,而是一个DOM树。我还必须补充说,你不必把它包装在一个div中。你可以直接将整个字符串传递给'$()'函数,并且它应该返回一个表示你的'html'标签的jQuery对象。 – 2010-08-10 03:00:31
在将它抛入只是普通字符串的DOM之前。
您可以确定使用REGEX。
我认为最简单的方法就是将它放入DOM并从那里获取,然后再从DOM中删除它。
jquery本身充满了这样的技巧。它始终将各种东西添加到DOM中,包括使用$('< p>某些html </p>')构建的东西。所以如果你沿着这条路走下去,你仍然会有效地将东西放入DOM中,然后暂时删除它,除非它是Jquery做的。
它将DOM元素从您给出的HTML中创建出来,并将这些元素返回到Jquery对象中,然后您可以在某处插入到文档中或使用其他方式执行其他操作。 Jquery通过使用innerHTML和等价物来利用浏览器的内部HTML解析器。 – thomasrutter 2010-08-10 03:00:11
@Travis:如jQuery文档(http://api.jquery.com/jQuery/#jQuery2)所述,“... jQuery试图按照HTML描述创建新的DOM元素,然后创建一个jQuery对象并返回指这些元素......“ – 2010-08-10 03:02:21
John Resig(jQuery作者)创建了一个您可能会觉得有用的pure JS HTML parser。从该页面的一个例子:
var dom = HTMLtoDOM("<p>Data: <input disabled>");
dom.getElementsByTagName("body").length == 1
dom.getElementsByTagName("p").length == 1
Buuuut ...这个问题包含了约束,我认为你需要更关键的。而不是在一个JS变量中围绕一个硬编码的HTML字符串工作,你能不能重新考虑为什么它首先是这样的? 什么是用于硬编码的字符串?
如果它只是坐在脚本中,请将其重新编写为适当的对象。
如果是来自AJAX调用的响应,那么已经有一个非常好的jQuery AJAX API。 (补充:虽然jQuery的只是返回它没有任何解析它能力的字符串,所以我想你又回到了起点有)
jquery - $('body')。html() – khairil 2010-08-10 02:52:45
@khairil - 仔细阅读该问题... – detly 2010-08-10 02:58:26
opss,对不起,请忽略我以前的评论。 – khairil 2010-08-10 03:03:32