[英]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.