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_tagobject doesn't support this property or method

また、2 つregexを as /[@]+[A-Za-z0-9_]+/g,andとして使用しています/[#]+[A-Za-z0-9_]+/gが、両方ともリンクで使用されています。

<a href="http://twitter.com/me" target="_blank">@me</a>`

aを使用してタグを返しているため

return link.prop('outerHTML');

したがって、regexあまりにも変更するか、または置換を使用する方がよいlinkのでtext/href、必ず変更を加えてください。

于 2013-09-28T15:05:02.623 に答える