Javascript bookmarklet, поиск по регулярному выражению, динамически заменяйте на ссылку html - PullRequest
0 голосов
/ 27 октября 2010

У меня есть html, в котором много всего:

<TD CLASS="broke"> - WF-1234567 -  </TD>
<TD CLASS="broke"> - WF-1111111 -  </TD>
<TD CLASS="broke"> - WF-7654321 -  </TD>

Я хочу создать букмарклет javascript, чтобы заменить все 7-значные числа гиперссылкой.Как это сделать?

Моя попытка со многими ошибками ....

javascript:
var match=new RegExp("(- WF-....... - Review)","ig");
var x = document.getElementsByClassName("broke").innerHTML;
x=x.replace(match,<a href="www.blah.com/"+7digitSubsetofMatch>7digitlink</a>);
document.getElementsByClassName("browseItemLocation").innerHTML=x;

1 Ответ

1 голос
/ 27 октября 2010

getElementsByClassName возвращает список, ни один элемент с innerHTML не доступен. вам придется перебирать список и обрабатывать каждый элемент в отдельности.

javascript:(function(){

var elements = document.getElementsByClassName("broke");

for (var j = 0; j < elements.length; j++) {

чтобы найти и заменить число, вам нужно настроить группировку регулярных выражений - прямо сейчас вы захватываете большую строку без способа получения цифр. Вы делаете это, перемещая скобки, чтобы сразу окружить число

    var pattern = new RegExp("WF-(\\d+)", "ig");
    var match = elements[j].innerHTML.match(pattern);

если у вас было успешное совпадение, то match[0] будет соответствовать всей строке, а match[1] будет цифрами

Вы не можете написать буквальный HTML в JavaScript - это должна быть строка.

    var x = elements[j].innerHTML.replace(match[1],
        '<a href="www.blah.com/' + match[1] + '">' + match[1] + '</a>');

тогда вы не сможете заменить свой оригинальный HTML.

    elements[j].innerHTML = x;
}

})()

Я не знаю, что делает твоя последняя строка, но она кажется ненужной.

...