0

ユーザーがテキストエリアに入力してリンクを投稿するたびに、誰かがhttps://stackoverflow.com/?q=and+message+continues+till+endと入力するたびに、stackoverflow.comがここで行うように、すぐにリンクに変更したいと思いますが、誰かがリンク以外のテキストを渡すと、テキストの外観に戻ります...

これが私の試みです。下に投稿する前に、私はjavascriptの学生ではありません。貼り付けを切り取り、他のプログラミングロジックを使用して、それを実現しようとしています。そのため、返信するときはいつでも、JavaScript を使用していない私のバックグラウンドを考慮してください。

ありがとう

以下の私の試み:-

function isUrl(s) {
    var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
        return regexp.test(s);
    }

$('#status').keyup(function() {
    var value = $("#status").val();
    var words = value.split(" ");
    for (var i=0;i<words.length;i++)
    {
        var n = isUrl(words[i]);
        if (n)  {
            var deadLink = '<a href="'+words[i]+'" target="_blank" rel="nofollow">'+words[i]+'</a>';
            words[i].replace(words[i], deadLink);
        }
    }
});

これは機能していません。ここではエラーは発生していませんが、以下のように配列のインデックスを付けずに使用すると、配列エラーが発生します:-

for (var i=0;i<words.length;i++)
{
    var n = isUrl(words);
    if (n)  {
    var deadLink = '<a href="http://google.com/search?q='+words+'" target="_blank" rel="nofollow">'+words+'</a>';
    words.replace(words, deadLink);
    }
}

それを修正する方法はありますか?

ありがとう

4

1 に答える 1

2

主な問題:

  • replace()何にも割り当てていなかったため、呼び出しは効果がありませんでした。
  • 結果の配列は使用しませんでしたwords-処理しただけで...何もしません。

私が行ったいくつかの変更:

  • 入力したテキストをエスケープするために 1 行追加しました。

    var value = $('<div/>').text(nonEscapedValue).html();
    
  • replace()の結果を代入するように の行を変更replace():

    words[i] = words[i].replace(words[i], deadLink);
    
  • 最後に、処理された配列をに入れる行を追加しましたdiv:

    $("#myResultDiv").html(words.join(" "));
    

最終的なコード (ここで jsfiddle のデモを確認してください):

function isUrl(s) {
    var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
    return regexp.test(s);
}
$('#status').keyup(function() {
    var nonEscapedValue = $("#status").val();
    // added line below to escape typed text
    var value = $('<div/>').text(nonEscapedValue).html();
    var words = value.split(" ");
    for (var i=0;i<words.length;i++)
    {
        var n = isUrl(words[i]);
        if (n)  {
            var deadLink = '<a href="'+words[i]+'" target="_blank" rel="nofollow">'+words[i]+'</a>';
            // changed line below to assign replace()'s result
            words[i] = words[i].replace(words[i], deadLink);
        }
    }
    // added line below to put the result in to the div #myResultDiv
    $("#myResultDiv").html(words.join(" "));
});

うまくいけば、これはあなたの目標に向かってあなたを助けるでしょう.

于 2013-06-30T18:08:26.623 に答える