繁体   English   中英

Javascript从评论的html中提取内容

[英]Javascript pulling content from commented html

有点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 -->

任何想法都赞赏。

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

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

var commentedOutHTml = [];
var iterator = document.createNodeIterator(document.body, NodeFilter.SHOW_COMMENT, NodeFilter.FILTER_ACCEPT, false);
var currentNode;
while (currentNode = iterator.nextNode()) {
    commentedOutHTml.push(currentNode.nodeValue);
}

alert(commentedOutHTml.toString());

您可以使用此代码:

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);

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM