2013-03-13 87 views
2

我在NodeJS中使用JQuery npm尝试处理某些HTML。但我似乎无法得到最终的HTML作为文本发送与http模块的管道。我可以得到$html.find('head')以生成html文本,但$html.find('html')和所有其他解决方案产生一个对象。如何更改和检索HTML文档

这里是我的代码:

// this code, which will run under nodejs using jquery, should update the head in an entire html document 

var $ = require('jquery'); 
var $html = $('<html><head><title>this should be replaced</title></head><body>and the entire document should be available as text</body></html>'); 
console.log('html', $html); 
var $body = $html.find('body'); 

var res = $html.find('head').replaceWith('<head><title>with this</title></head>'); 
console.log(res.html()); 

http://jsfiddle.net/Wb7yV/4/

的感谢!

+0

顺便说一句,'$ html.find('head')'不会产生任何HTML文本。 – 2013-03-13 19:27:52

回答

0

当您查看控制台日志$html时,您会注意到它包含2个索引对象:titletext。在查看这些对象时,请注意,既没有任何子女,设计了哪些功能(如jQuery.find())可供浏览。

描述:获取当前匹配的元素集合中的每个元件中,通过选择器,jQuery对象,或元件过滤的后代。

对于“标题”或“文本”,您可以根据需要选择单个元素。

var $html = $('<html><head><title>this should be replaced</title></head><body>and the entire document should be available as text</body></html>'); 
var $title = $html.filter('title'); 
var $body = $html.filter('text'); 

var res = $title.html('replace with this'); 
console.log(res.filter('title').html()); 
// returns: "replace with this" 
+0

谢谢,但我的目标不是取代已经有效的标题。我的目标是在做一些替换之后检索html文本。 – davidm 2013-03-13 19:31:03

+0

@davidm,这样做的方式和你做的一样,但是因为你没有任何DOM后代,所以你不能在你创建的字符串中使用'find'。但是,您仍然可以在替换文本之前和之后选择它们。只需使用'filter'并查看'console.log(object)'来查看可以过滤哪些节点。 – 2013-03-13 19:49:00

+0

@davidm,我编辑了代码来演示它如何工作。 – 2013-03-13 20:02:11

0

你和你的jsfiddle很接近。 要改变头,只要使用此:

$('head').html('<title>with this</title>'); 
0

与您发布什么去严格,你可以看到$html是一个对象数组有两个entires。如果您运行var res = $html[1]; console.log(res.textContent);,您可以获取正文的文本。但不知道这是你的追求?