访问<;span>;Javascript中的节点

访问<;span>;Javascript中的节点,javascript,dom,greasemonkey,Javascript,Dom,Greasemonkey,我正在尝试编写一个只显示带有标签的照片的greasemonkey脚本 它运行的站点是这样写的: <div class="photos"> <ul> ... <li> <a href="photo1"> <img src="http://somesite.co/photo1.jpg" </a> <br /> <a href="tags_photo1"> <span class="tags">&am

我正在尝试编写一个只显示带有标签的照片的greasemonkey脚本

它运行的站点是这样写的:

<div class="photos">
<ul>
...
<li>
<a href="photo1"> <img src="http://somesite.co/photo1.jpg" </a> <br /> <a href="tags_photo1"> <span class="tags">&nbsp;bacon, delicious&nbsp;</span> </a>
</li>
...
</ul>
</div>
它返回一个XPCNativeWrapper集合,其中所有元素都未定义

关于如何获取标签有什么想法吗?我对javascript相当陌生,所以如果我的问题很愚蠢,我很抱歉

[编辑]

var spans, tags;    
spans = document.getElementsByTagName('span');
for (var i = spans.length - 1; i >= 0; --i)
{
    tags = spans[i];
    alert(tags.wrappedJSObject.nodeValue);
}
返回为null,即使使用wrappedJSObject也是如此。是因为Object.prototype不适用于XPCNativeWrapper吗?还是我遗漏了什么?

使用纯Javascript(而不是使用像jQuery这样的库——我认为在greasemonkey脚本中不能使用jQuery),这应该可以工作:

var spans = document.getElementsByTagName("span");
for(var i = spans.length - 1; i >= 0; i--) {
    if(spans[i].className == "tags") {
        var span = spans[i];
        // do something to span
    }
}
如果可以的话,您可能希望研究使用jQuery,因为jQuery中的代码是:

$("span.tags").each(function() {
    var span = this;
    // do something to span
});
[编辑]

var spans, tags;    
spans = document.getElementsByTagName('span');
for (var i = spans.length - 1; i >= 0; --i)
{
    tags = spans[i];
    alert(tags.wrappedJSObject.nodeValue);
}
您可能会遇到问题,因为您的img标签未关闭

一旦您访问了带有标记的span,您只需要获取它的
innerHTML
属性

如果tags元素不包含“bacon”,则此代码将删除整个列表项:


2件事:for(int i=0;i=0;--i){起作用。而span[i]返回[object XPCNativeWrapper[object HTMLImageElement]]感谢您的帮助思想这解释了XPCNativeWrapper是什么:因此您应该能够将XPCNativeWrapper中包装的元素视为元素本身。本文中标题为“深入”的部分也应该有所帮助:span.innerText返回为未定义sorry:typo。应该是innerHTML。
Array.forEach(span,函数(span){});
如果不使用JQuery。
var spans = document.getElementsByTagName("span");
for(var i = spans.length - 1; i >= 0; i--) {
    if(spans[i].className == "tags") {
        var span = spans[i];
        if (!span.innerHTML.match(/bacon/i)) {
            var li = span.parentElement.parentElement;
            li.style.display = "none";
        }
    }
}