2009-11-09 2 views
0

Что я хочу сделать, это вставить ссылку и img для каждой темы этого форума, которую я использую. Ссылка href на ссылку должна основываться на href дочернего элемента. Вот частичный вид HTML, я вынул некоторые вещи для ясности, дайте мне знать, если я взял слишком много. Самый последний тэг повторяется 20 раз или около того, в зависимости сколько нити видны в настройкахВставить ссылку с текстом с другой ссылки greasemonkey

<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] и использовать HREF, чтобы создать свою собственную ссылку?

Я думал, что это можно было бы написать с помощью XPATH, но я не мог ее обвести. Было бы неплохо в этом случае?

Извините за нерешительный вопрос.

ответ

1

Выполняя свой собственный ответ, вы должны действительно обрабатывать манипуляции с DOM самостоятельно, а не вставлять его в другой тег. Кроме того, размещение тегов 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); 
} 
+0

Хорошая точка. Я всегда думал, что .innerHTML был грязным взломом. Благодаря :) – aland

1

Во-первых, в вашем примере кода выше вы понимаете, что вы создаете одну ссылку ( тег), а затем вложенности вторую ссылку внутри него через 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

На самом деле я думаю, что я решил это .. (спасибо майкл, я это исправил код вверх благодаря вашему входу)

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

Любой видят ничего плохого в этом?

+1

Да, и в случае элементов ссылки вы также можете напрямую проверить атрибут href, не используя getAttribute. Однако любые накладные расходы в любом случае, вероятно, тривиальны для ваших нужд. – donohoe

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