Вставить ссылку с текстом из другой ссылки greasemonkey - PullRequest
0 голосов
/ 09 ноября 2009

Что я хочу сделать, это вставить ссылку и 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] и использовать href для создания собственной ссылки?

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

Извините за скучный вопрос.

Ответы [ 3 ]

1 голос
/ 09 ноября 2009

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

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 голос
/ 09 ноября 2009

Продолжая свой собственный ответ, вы действительно должны сами обрабатывать 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);
}
1 голос
/ 09 ноября 2009

Сначала в приведенном выше примере кода вы понимаете, что создаете одну ссылку (тег 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...
}

Надеюсь, это поможет.

...