我有一个这样的代码,我得到了#34; Uncaught TypeError:无法调用方法'替换'未定义"在控制台,我不是很擅长javascript
<script>
parse_tag = function (str) {
var create_link = function (url, text) {
var link = $("<a>", {
text: text,
href: url,
target: "_blank"
});
return link.prop('outerHTML');
};
// parse username
str = str.replace(/[@]+[A-Za-z0-9_]+/g, function (s) {
return create_link("http://twitter.com/" + s.replace('@', ''), s);
});
// parse hashtags
str = str.replace(/[#]+[A-Za-z0-9_]+/g, function (s) {
return create_link("http://search.twitter.com/search?q=" + s.replace('#', ''), s);
});
return str;
};
$(document).ready(function() {
var text = $('.desc');
parse_tag(text);
});
</script>
答案 0 :(得分:0)
您正在调用类似
的功能var text = $('.desc');
parse_tag(text);
功能是
parse_tag = function (str) { // <-- str suppose to be a string
var create_link = function(url, text){
// ...
return link.prop('outerHTML');
}
//...
str = str.replace(/[@]+[A-Za-z0-9_]+/g, function (s) {
return create_link("http://twitter.com/" + s.replace('@', ''), s);
});
}
在这种情况下,str
应为字符串,但根据var text = $('.desc');
,它是jQuery
对象,因此您可以将var text = $('.desc');
更改为var text = $('.desc').text();
或进行更改在parse_tag
函数中,否则,您将收到类似object doesn't support this property or method
的错误。
此外,您使用两个regex
作为/[@]+[A-Za-z0-9_]+/g,
和/[#]+[A-Za-z0-9_]+/g
,但两者都在链接上使用,例如
<a href="http://twitter.com/me" target="_blank">@me</a>`
因为您使用
返回a
代码
return link.prop('outerHTML');
因此,在您的regex
中进行更改,或者最好在link
的{{1}}上使用替换,因此请务必进行更改。