0

我有这样的代码,我在控制台中得到“Uncaught TypeError: Cannot call method 'replace' of undefined”,我不太擅长 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>
4

1 回答 1

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.

此外,您正在使用两个regexas /[@]+[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');

因此,请在 your regextoo 中进行更改,或者最好使用 replace on link's text/href,因此请确保进行更改。

于 2013-09-28T15:05:02.623 回答