Javascript从评论的html中提取内容

时间:2015-11-30 16:07:21

标签: javascript

一个JS新手,我有一个跟踪脚本,它读取页面的元数据并使用这个在该页面上放置正确的脚本:

var element = document.querySelector('meta[name="tracking-title"]');
var content = element && element.getAttribute("content");
console.log(content)

这显然会将正确的标签发布到控制台,这样我就可以确保它正常工作..而且它在测试情况下也是如此。但是,在实际网站上,我所定位的元数据是由Java应用程序在页面上生成的,并且在我无法控制的情况下,问题在于它是在注释掉的区域中。此脚本无法在注释掉的区域内读取。即

<!-- your tracking meta is here
<meta name="tracking-title" content="this-is-the-first-page">
Tracking finished -->

任何想法都赞赏。

3 个答案:

答案 0 :(得分:2)

一种方法是使用NodeIterator并获取注释节点。下面的简单示例。您仍然需要解析所需数据的返回值,但我相信您可以在此处扩展它以执行您想要的操作。

小提琴:http://jsfiddle.net/AtheistP3ace/gfu791c5/

.text
.global my_call
my_call:
    sub  $8, %esp
    fstp (%esp)
    call *12(%esp)
    add  $8, %esp
    ret

答案 1 :(得分:2)

您可以使用此代码:

var html = document.querySelector('html');
var content;
function traverse(node) {
  if (node.nodeType == 8) { // comment
    var text = node.textContent.replace(/<!--|-->/g, '');
    var frag = document.createDocumentFragment();
    var div = document.createElement('div');
    frag.appendChild(div);
    div.innerHTML = text;
    var element = div.querySelector('meta[name="tracking-title"]');
    if (element) {
      content = element.getAttribute("content");
    }
  }
  var children = node.childNodes;
  if (children.length) {
    for (var i = 0; i < children.length; i++) {
      traverse(children[i]);
    }
  }
}
traverse(html);

答案 2 :(得分:1)

你可以试试这个。这将要求你使用jQuery。

$(function() {
    $("*").contents().filter(function(){
        return this.nodeType == 8;
    }).each(function(i, e){
        alert(e.nodeValue);
    });
});