2014-01-11 21 views
1

我想修改HTML頁面,看起來是這樣的:的Greasemonkey:添加一個鏈接表中的

<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); 
    } 
} 

這確實幾乎我想要它做的事,但並不完全。輸出看起來像這樣:

爲什麼會出現「桃花」和「巧克力」之間沒有空格? 當我禁用通用和手動添加一行與巧克力鏈接的HTML文件,它顯示像這樣:

apple peach chocolate banana strawberry 
carrot bean tomato cucumber 

這是我想達到的目標。我的GM腳本中的錯誤在哪裏?我現在已經嘗試了幾個小時,但我找不到它。 :-(

回答

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 -elements,第二個不會,

當你手動添加一行到HTML中,無疑你正在格式化一個a -element每行,所以你正在生產的第一個版本。但是,當您使用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); 

    } 
} 
+0

謝謝Hellion。現在工作正常。 –

相關問題