Проблемы с переписыванием значений href с помощью jquery - PullRequest
0 голосов
/ 25 февраля 2011

Я пытаюсь обработать URL в виде обычного текста.

На данный момент я могу нацелиться и переписать www.null.com / foo / bar в href с тем же hrefи значение в качестве строки само.

(Спасибо, Стив Рейнольдс http://bit.ly/Xk5Hc)

$("#topcontent p").each(function(){
    var newHTML;
    var stringInput = $(this).html();
    newHTML = replaceURLWithHTMLLinks(stringInput);     
    $(this).html(newHTML).find('a').addClass('highlite');
});

function replaceURLWithHTMLLinks(text) {
    var exp = /(www[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
    return text.replace(exp,"<a href=http://$1>$1</a>");
}

Теперь тогда. Есть ли способ изменить тег привязки так, чтобызначение сокращается до .com вместо .com / foo / bar?

<a href="http://www.null.com/foo/bar">www.null.com</a>

Ответы [ 3 ]

0 голосов
/ 25 февраля 2011

проще, если вы просто сделаете функцию, возвращающую только очищенный HTML, поэтому:

function replaceURLWithHTMLLinks(text) {
    var exp = /(www[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
    return text.replace(exp,"$1");
}

, а затем просто добавьте раздел href и html отдельно:

href = replaceURLWithHTMLLinks(stringInput);
var link = $(document.createElement('a')).attr('href', 'http://'+href)
              .addClass('highlite')
              .html(href.replace(/\/[^.]+$/gi, ''));
$(this).html(link);

, который просто создаст новый объект ссылки, добавит правильный href, который вы вернете, с вашей функцией, а затем заменит все конечные символы без точек на '' (в вашем случае это всегда будет / foo / bar)

Кроме того, это намного лучше, чем в предыдущем примере, поскольку он менее интенсивно использует JavaScript (вам не нужно снова искать «a», а затем изменять его свойства, вы просто создаете его с этими свойствами с самого начала)

0 голосов
/ 25 февраля 2011

Это работает?

Регулярное выражение: a href=["']*http:\/\/([a-zA-Z0-9+&@#%=~_|.]+)

http://www.rubular.com/r/6UNlh52T86

0 голосов
/ 25 февраля 2011
var exp = /(www[-A-Z0-9+&@#%?=~_|!:,.;]*[-A-Z0-9+&@#%=~_|])([-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])?/ig;

Это будет соответствовать и, следовательно, заменять только раздел перед первым '/', хотя он также будет охватывать и остальные, оставляя вам:

<a href="http://www.null.com">www.null.com</a>

Редактировать: Исправлена ​​проблема с URL-адресами без чего-либо впоследствии. Проверено в jsFiddle.net

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...