2012-05-21 4 views
2

Я пытаюсь добавить ссылку mailto на статические адреса электронной почты, найденные в списке результатов из базы данных, используя JQuery. Я смог найти следующий отрывок онлайн, который работает для первого результата, но он не работает для каких-либо адресов электронной почты после первого.Добавить mailto ссылку на статическую электронную почту с помощью JQuery

Мне любопытно, почему это так .. и как я могу заставить его применить атрибут mailto: каждый адрес электронной почты, найденный в результатах. :-)

Текущий код:

<script type="text/javascript"> 
$(document).ready(function(){ 
    var regEx = /(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)/; 
    $("table td").filter(function() { 
     return $(this).html().match(regEx); 
    }).each(function() { 
     $(this).html($(this).html().replace(regEx, "<a href=\"mailto:$1\">$1</a>")); 
    }); 
}); 

Спасибо!

+0

Что вы подразумеваете под первым результатом? только первый 'td' или только первое электронное письмо в td? – gdoron

+0

Жаль, что вы не являетесь конкретным! - Только первый ТД. :-) – user1364769

+0

Можете ли вы создать ДЕМО на http://jsfiddle.net? – gdoron

ответ

2

Я понятия не имею, почему это работает только для первого матча, но вы можете улучшить свой код к этому:

$(document).ready(function() { 
    var regEx = /(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)/; 
    $("table td").filter(function() { 
     return this.innerHTML.match(regEx); 
    }).html(function(index, old) { 
     return old.replace(regEx, "<a href=\"mailto:$1\">$1</a>"); 
    }); 
});​ 
+0

Благодарим за отзыв! Я попытался использовать ваш код, но он сообщает синтаксическую ошибку со следующим: «return old.replace (regEx,« $1 »)); Что касается моего существующего кода, кажется, что в какой-то момент Javascript «замораживает», и я не уверен, как его устранять, поскольку он не сообщает о каких-либо проблемах. В основном у меня есть база данных PHP, возвращающая результаты, и JS должна добавлять ссылки на адреса электронной почты в этих результатах. К сожалению, даже когда я добавляю console.log («Сообщение»); после кода, который я изначально использовал, он не показывает этого. Есть идеи? – user1364769

+0

@ пользователь1364769. Извините, были непревзойденные '(', во всяком случае, откуда такое регулярное выражение? Дайте мне демо для работы. – gdoron

+0

Привет! Это работает, когда я тестировал его на JSFiddle - http://jsfiddle.net/xV2HP/ Я использую тот же код на моей странице PHP, но странно, что только первый результат получает ссылку.// Я знаю, что это должно быть сложно устранить, если я не предоставил вам доступ к панели администратора. Я глядя на. Мне было интересно, есть ли у вас какие-либо идеи для устранения этой проблемы. Кстати, консоль вообще не сообщает о каких-либо ошибках. – user1364769

3

Вероятно, это не более полезным для вас, но может быть, может быть для кого-то: вы должны добавить 'G' в конце регулярного выражения:

$(document).ready(function() { 
var regEx = /(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)/g; 
$("table td").filter(function() { 
    return this.innerHTML.match(regEx); 
}).html(function(index, old) { 
    return old.replace(regEx, "<a href=\"mailto:$1\">$1</a>"); 
}); 

});

от W3C School site:

Примечание. Если регулярное выражение не содержит модификатор g (для выполнения глобального поиска), метод match() возвращает только первое совпадение в строке.

+2

Я потратил некоторое время, работая над этим вопросом, который решил/g. Во многих сообщениях блога jquery есть несколько других сообщений, касающихся преобразования статических электронных писем/ссылок на ссылки. Все они используют регулярное выражение без/g. Спасибо за это. – tatorface

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