从另一个链接greasemonkey插入带有文本的链接

时间:2009-11-09 18:29:48

标签: javascript html greasemonkey

我想要做的是为我使用的论坛的每个帖子插入一个链接和img。链接的href应该基于元素子元素的href。 这是HTML的部分视图,为了清楚起见,我已经拿出一些东西,如果我花了太多的话,请告诉我。最后一个标签重复20次左右,具体取决于首选项中可见的线程数

<div id="content">
    <form id="page_form">
        <div id="forums">
            <table class="grid forumtable">
                <tr></tr>
                <tr></tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td>
                    <div class="lastposter">
                        <a></a>
                        <a href="view/1234/?page=last#845612"><img></img></a>
                    </div>
                    </td>
                </tr>
                <tr> ...same as above.. x20 </tr>
            </table>
        </div>
    </form>
</div>

所以这是我到目前为止的代码,它通过插入静态链接来工作。我想要的是在前一个链接的#之后使用值的链接。

var lastpst = document.getElementsByClassName('lastposter');
for (var i=0; i < lastpst.length; i++){
 links = document.createElement('a');
 links.setAttribute('href','we.html');
 links.innerHTML ='<a href="we.html"><img src="/static/img/silk/zoom.png" /></a>';
 lastpst[i].appendChild(links);
}

那么如何从lastpst [i]访问a标签并使用href创建自己的链接?

我原以为可以用XPATH写这个,但是我无法理解它。在这种情况下,这是一个好主意吗?

抱歉这个冗长的问题。

3 个答案:

答案 0 :(得分:1)

首先,在上面的代码示例中,您意识到您正在创建一个链接( A 标记),然后通过 innerHTML 在其中嵌套第二个链接?你可能不想这样做......

如果我理解正确的问题,我会这样做:

var lastpst = document.getElementsByClassName('lastposter');
for (var i=0; i < lastpst.length; i++){

 var secondLink = lastpst[i].getElementsByTagName('a')[1];
 var secondLink = secondLink.href;

 // whatever you need your own code to do...
}

希望这有帮助。

答案 1 :(得分:1)

其实我觉得我解决了..(感谢michael,我已经修改了这段代码,感谢你的输入)

var lastpst = document.getElementsByClassName('lastposter');

for (var i=0; i < lastpst.length; i++){
 l = lastpst[i].getElementsByTagName('a')[1];
 ln = l.getAttribute('href');
 ln = ln.replace(/(?:.*?)#([0-9]{6})/,'/post/view/$1');

 links = document.createElement('a');
 links.setAttribute('href',ln);
 links.innerHTML ='<img src="/static/img/silk/zoom.png" />';
 lastpst[i].appendChild(links);
}

有人认为这有什么问题吗?

答案 2 :(得分:1)

继续自己的回复,您应该自己处理DOM操作,而不是将其插入另一个标记内。另外,将A标签放在A标签中可能是一个坏主意。

var lastpst = document.getElementsByClassName('lastposter');

for (var i=0; i < lastpst.length; i++){
    l = lastpst[i].getElementsByTagName('a');
    ln = l[1].getAttribute('href');
    ln = ln.replace(/(?:.*?)#([0-9]{6})/,'/post/view/$1');

    links = document.createElement('a');
    links.href = ln;

    img = document.createElement('img');
    img.src = "/static/img/silk/zoom.png"
    links.appendChild(img);

    lastpst[i].appendChild(links);
}
相关问题