2014-12-05 24 views
0

在JS中,我将HTML页面作为字符串变量的值。我需要从该页面中删除所有样式。修改包含HTML的JS字符串的方法

我可以这样做:

$(data).find("link[rel=stylesheet]").remove() 

,但如果我理解正确的jQuery发现只有体内。

  • 我不想使用正则表达式。我相信有一个简单的解决方案。
  • 我想也许有一种使用XPath的方法。

请给我一个方法来做到这一点,请!

我的代码:

Y.io.request('' + dataUrl, { 
    dataType: 'html', 
    method: 'get', 
    cache: 'true', 
    on: { 
     success: function() { 
      var data = this.get('responseData'); 
      child.setContent(data); 
     } 
    } 
} 

数据是HTML页面。在插入到孩子之前,我需要从中删除样式。

+1

显示完整的代码,并解释你的问题更好 – 2014-12-05 04:11:02

+0

更多的代码,请... – Rajesh 2014-12-05 04:13:47

回答

0

我认为你的问题并不清楚,但如果你想从HTML页面中删除所有样式表只需要这样做;

$('html').find("link[rel=stylesheet]").remove() 

的jQuery没有发现只有体内,它可以处理DOM在内的整个<html><head>的任何元素。

所以,如果您的变种data看起来是这样的:

'<html> <head> ... </head> <body> ... </body> </html>' 

你写会很好地工作的选择。

+0

你正确地理解我。但它不起作用。它返回空数组。 – 2014-12-05 05:06:46

+0

你能在小提琴中发布更完整的代码吗? – ianaya89 2014-12-05 05:09:07

0

不幸的是,如果你希望jQuery能够解析整个DOM并直接将它当作HTML处理,那么jquery会引起窒息。也就是说,如果您对返回的HTML页面的格式良好有保证(主要是它是否是有效的XML?),那么我们可以通过将页面内容视为XML文档来处理一些棘手的解决方法。在此示例代码看看:

var content = '<html><head><link rel="stylesheet" type="text/css" href="mystyle.css"></link></head><body>hello</body></html>'; 
// $xml now has a jquery wrapped xml doc 
var $xml = $($.parseXML(content)); 
// find the stylesheets and remove them 
$xml.find("link[rel=stylesheet]").remove(); 
// $xml.contents() contains the jquery wrapped doc-content (i.e. the <html> tag and its contents) 
console.log($xml.contents()[0].outerHTML); 

最终的console.log应该输出的页面(减去链路节点,这是我们在第5行删除)的HTML内容。

再次请注意,HTML内容必须是有效的XML才能正常工作。这意味着包括关闭标签:-)

编辑:这里有一个小提琴http://jsfiddle.net/rgsaz33e/1/