Greasemonkey:在表格中添加一个链接

时间:2014-01-11 02:14:04

标签: greasemonkey

我想修改一个看起来像这样的HTML页面:

<html><head><title>Test</title></head>
<body bgcolor=white link=black alink=black vlink=black text=black>
<table cellpadding=0 ><tr><td class=tiny align=center>
<a href="apple.php">apple</a>
<a href="peach.php">peach</a>
<a href="banana.php">banana</a>
<a href="strawberry.php">strawberry</a><br>
<a href="carrot.php">carrot</a>
<a href="bean.php">bean</a>
<a href="tomato.php">tomato</a>
<a href="cucumber.php">cucumber</a>
</td></tr></table></body></html>

现在我编写了一个Greasemonkey脚本来添加一个额外的链接,同时保留所有现有链接:

// ==UserScript==
// @name        link_add_test
// @namespace   file:///D:/Test/
// @description Test for adding an additional link
// @include     file:///D:/Test/test.html
// @version     1
// @grant       none
// ==/UserScript==

var searchstring = 'peach';
var anchors = document.getElementsByTagName('a');

for (i=0; i<anchors.length; i++)
{
    if (anchors[i].innerHTML == searchstring)
    {
        var newlink = document.createElement('a');
        newlink.href      = 'chocolate.php';
        newlink.innerHTML = 'chocolate';
        newlink.target    = '_blank';
        anchors[i].parentNode.insertBefore(newlink, anchors[i].nextSibling);
    }
}

这几乎我希望它做什么,但并不完全。输出如下:

apple peachchocolate banana strawberry
carrot bean tomato cucumber

为什么“桃子”和“巧克力”之间没有空间? 当我禁用GM并使用巧克力链接手动向HTML文件添加一行时,它显示如下:

apple peach chocolate banana strawberry
carrot bean tomato cucumber

这就是我想要实现的目标。 GM脚本中的错误在哪里?我现在已经尝试了几个小时,但我找不到它。 : - (

1 个答案:

答案 0 :(得分:3)

与您的期望相反,标签之间的空白实际上在这里有所不同:

<a href="peach.php">peach</a>
<a href="banana.php">banana</a>

不同
<a href="peach.php">peach</a><a href="banana.php">banana</a>

第一个将在a - 元素之间有空格,第二个不会。

当您在HTML中手动添加一行时,毫无疑问您要使用每行一个a - 元素对其进行格式化,因此您将生成第一个版本。但是,当您使用Greasemonkey插入新节点时,您将生成第二个版本。如果你想要空格,你也必须插入它:

var searchstring = 'peach';
var anchors = document.getElementsByTagName('a');

for (i=0; i<anchors.length; i++)
{
    if (anchors[i].innerHTML == searchstring)
    { 
        var foo = document.createTextNode(' ');
        var newlink = document.createElement('a');
        newlink.href      = 'chocolate.php';
        newlink.innerHTML = 'chocolate';
        newlink.target    = '_blank';       
        anchors[i].parentNode.insertBefore(newlink, anchors[i].nextSibling);
        anchors[i].parentNode.insertBefore(foo, anchors[i].nextSibling);

    }
}