2012-03-16 40 views
0

我有一个名为myWebsite.html的模板文件。它包含HTML模板需要的所有内容。所以它有HTML,HEAD和BODY标签。我想用JavaScript加载它,并把它放到网站上的一个div上。所以我不想拥有HTML,HEAD和BODY标签。这个怎么做?如何使用JavaScript从HTML字符串中删除整个HTML,HEAD标签和BODY标签?

这是什么,我需要有一个原型:

$val = getData('myWebsite.html'); 
$val = removeHTMLHEADBODYTAGS($val); //remove these tags with everything insite, also remove the body tag but leave the contents in the body tag. Also remove the end tags of body and html - HOW TO DO THIS? 
div.innerHTML = $val; 

我想这样做,在纯JavaScript = NO jQuery的

+0

你尝试过什么了吗?因为听起来你想让我们为你编程。 – 2012-03-16 12:25:53

+1

+劳伦斯你写的是非常没有礼貌的。 – 2012-03-16 12:31:58

回答

1

你可以用正则表达式提取它。例如:/\<body[^>]*\>(.*)\<\/body/m - 应该返回<BODY>元素中的所有内容。

$val = getData('myWebsite.html'); 
var reg = /\<body[^>]*\>([^]*)\<\/body/m; 
div.innerHTML = $val.match(reg)[1]; 

实施例的jsfiddle代码:http://jsfiddle.net/x4hPZ/1/

+0

它不适用于\ r \ n作为新行。有任何想法吗? http://jsfiddle.net/czg88/1/ – 2012-03-16 13:29:28

+0

hm - CR LF是我用过的行。我也没有看到你发布的jsFiddle代码有任何问题。 (我在Win7 Firefox10上)你在用什么?我认为,正则表达式中的m标志将处理任何行结束... – thomthom 2012-03-16 13:37:33

+0

好的 - 发现这篇文章:http://siphon9.net/loune/2011/02/match-any-character-including-new- line-in-javascript-regexp /根据以下内容对代码进行了修改:http://jsfiddle.net/czg88/2/这样做是否更好?由于我无法重现这个问题,我无法证实我自己。 – thomthom 2012-03-16 13:43:54

3

为什么不取出来的标签上的信息,然后与工作那?没有必要获取所有信息和删除HTML,头和身体:

content = $val.getElementsByTagName('body')[0].innerHTML(); 
+0

+ Hidde对。这将是一个很好的解决方案,但如果val是字符串时如何能够调用getElementsByTagName? – 2012-03-16 12:33:04

+0

这可以通过将val字符串转换为具有新元素的dom元素来实现。我在这里做了一个小例子:[link](http://jsfiddle.net/TwVbU/) – 2012-03-16 12:48:31

+0

+ Hidde它使用MooTools。所以这不是我正在寻找的解决方案。 – 2012-03-16 13:15:22

0

怎么样:

var bodyContents = htmlstring.split('<body');//no >, body could have a property 
bodyContents = bodyContents[1].replace('</body>','').replace('</html>','').replace(/^.*\>/,''); 

最后的正则表达式替换移除开口身体标记的关闭>,以及所有可能的代码属性。我想创建一个(i)Frame节点,将html加载到该框架中,并从body标签中获取innerHTML。 。只是一个建议。

对,iFrame的方式:

var document.ifrm = document.createElement('iframe') 
document.ifrm.style = 'visibility:hidden'; 
document.body.appendChild(document.ifrm); 
idoc = (document.ifrm.contentDocument ? document.ifrm.contentDocument : document.ifrm.contentWindow.document;) 
idoc.open(); 
idoc.writeln('<html><head><title>foobar</title></head><body><p>Content</p></body></html>'); 
idoc.close(); 
var bodyContents = idoc.body.innerHTML; 

对于代码的解释:http://softwareas.com/injecting-html-into-an-iframe

或任何其他击中在google.com上为此事:)

+0

嗯......这听起来像一个解决方案,但...第一行后bodyContents不是一个数组?还有更多......关于iFrame ......我只是不喜欢这种解决方案。这有点乱。 – 2012-03-16 12:34:54

+0

你是对的,对不起...第二行应该读'bodyContents [1] = bodyContents [1] .replace(...'。 我不知道为什么你觉得使用临时帧的解决方案是创建一个框架,不附加到当前文档,解析html,并给你所有的方法来提取你需要的部分,你甚至可以在你的网站中使用它之前操作/检查数据。实际上,我认为这是一个更好的解决方案,但正如我所说,这只是一个建议:) – 2012-03-16 12:36:57

+0

+ Elias也许如果我看到这个解决方案,它会更清晰。 – 2012-03-16 13:16:44

0

使用jQuery,你可以不喜欢它此:

$(document).ready(function(){ 
    var your_content = $("html").clone().find("head,body").remove().end().html(); 
}); 
  1. 得到与“HTML”选择
  2. 内容进行复制与clone
  3. find要删除
  4. 删除它们的标签和
  5. 转换回HTML

所有在一行。

HTH,

--hennson

+0

hennson ...请... – 2012-03-16 12:38:14

+0

...或者如果您想在没有框架的情况下工作,请参阅http://stackoverflow.com/questions/7869393/parsing-specific-html-tags-in-javascript ... – hennson 2012-03-16 12:42:38

+0

没有解决方案 – 2012-03-16 13:05:10