我已经放弃了 - 为什么这不起作用?我正在尝试处理我的消息链接,它有效,但并非一直有效。这是jsFiddle,我认为问题的核心在下面的编辑 2中。
它贯穿该函数并执行除过滤器循环之外的所有操作...。如果您查看控制台,您会看到它 remove 对每个<a></a>
标签的内部文本执行正则表达式,但由于某种原因它不会保留一路改变!我究竟做错了什么?
JavaScript(使用 jQuery):
function processTweetLinks(messagetext) {
console.log(messagetext);
messagetext = messagetext.replace();
var replacePattern1, replacePattern2;
//URLs starting with http://, https://, or ftp://
replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
messagetext = messagetext.replace(replacePattern1, '<a class="individualMessageBioWhateverLink" href="$1" target="_blank">$1</a>');
console.log('replacePattern1: ' + messagetext);
//URLs starting with "www." (without // before it, or it'd re-link the ones done above).
replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
messagetext = messagetext.replace(replacePattern2, '$1<a class="individualMessageBioWhateverLink" href="http://$2" target="_blank">$2</a>');
console.log('replacePatter2: ' + messagetext);
// Ignore this block of code, it's just for future visitors that want to link #hashtags and @usernames - it works perfectly!
/*
exp = /(^|\s)#(\w+)/g;
text = text.replace(exp, "$1<a class='individualMessageBioWhateverHash' href='http://search.twitter.com/search?q=%23$2' target='_blank'>#$2</a>");
console.log(text);
exp = /(^|\s)@(\w+)/g;
text = text.replace(exp, "$1<a class='individualMessageBioWhateverMention' href='http://www.twitter.com/$2' target='_blank'>@$2</a>");
*/
console.log('before the a filter loop: ' + messagetext);
$(messagetext).filter('a').each(function (e) {
console.log(this.text);
var finalexp = /(([a-zA-Z]{3,5}\:\/\/)|(www\.))/gim;
var something = $(this).text().replace(finalexp, "");
$(this).text(something);
console.log(this.text);
console.log(something);
/*console.log('after each: ' + this);
//cleans up stuff like http://www. and https://www. and ftp://www. (obviously not a value URI... - may want to stick to just https?:\/\/ for that reason)
// /(([a-zA-Z]{3,5}\:\/\/)(www\.))/gim;
//Cleans up all instances of www.
// /(www\.)/gim;
});
*/
//console.log(text);
});
$("#correctedmessagetext").html(messagetext);
return messagetext;
}
var individualMessage = "http://google.com is great, but http://www.stackoverflow.com may be my only hope. www.yahoo.com is out of the question.";
processTweetLinks(individualMessage);
HTML:
<div id="correctedmessagetext"></div>
编辑:我实际上并没有将其输出到 div - 另一个函数的一部分生成一个字符串,并且在该字符串内部是对该函数的调用,本质上是processTweetLinks(individualMessage)
.
编辑 2:这是代码的简短版本 - 问题一定出在此处:
$(messagetext).filter('a').each(function(e) {
var finalexp = /(([a-zA-Z]{3,5}\:\/\/)|(www\.))/gim;
var something = $(this).text().replace(finalexp, "");
$(this).text(something);
});
return messagetext;