2014-01-11 2 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); 
    } 
} 

Это делает почти то, что я хочу, чтобы это сделать, но не совсем. Результат выглядит так:

Почему нет никакого пространства между «персик» и «шоколад»? Когда я отключить GM и вручную добавить строку в 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 -элемент на строку, поэтому вы создаете первую версию. Но когда вы вставляете новый узел с 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. Сейчас он работает нормально. –

Смежные вопросы