一个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 -->
任何想法都赞赏。
答案 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);
});
});