用jquery解析hashtag

时间:2013-09-28 13:20:21

标签: javascript jquery

我有一个这样的代码,我得到了#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>

1 个答案:

答案 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}}上使用替换,因此请务必进行更改。