0

テキストエリアを通過して !hash タグを転送する簡単なスクリプトを作成しました! と @person names@ を 2 つの別々の入力に変換します。

ただし、2 つの正規表現条件 (単語が「!」で始まり、「!」記号で終わる) の最初の条件が満たされない限り、次の条件では機能しません。

たとえば、42 行目のコード console.log(persons_parsed); !hash tag! でない限り、まったく実行されません。テキストエリアに入力しました。

それを機能させるには、 @person name@ しか入力できず、 input#persons_jquery に入力しますか?

jsfiddle のコード: http://jsfiddle.net/Yz2jw/1/

問題のある部分

if (tags_parsed.length > 0) {

        var vysledek_tags = null;
        for (i = 0; i < tags_parsed.length; i++) {
            if (vysledek_tags) {
                var vysledek_tags = vysledek_tags + ', ' + tags_parsed[i].replace(/[!]/g, '');
            } else {
                var vysledek_tags = tags_parsed[i].replace(/[!]/g, '');
            }
        }
        $('#tags_jquery').val(vysledek_tags);

    }
    console.log(persons_parsed); // THIS DOESNT RETURN ANY VALUE!!!

    if (persons_parsed.length > 0) {

        var vysledek = null;
        for (i = 0; i < persons_parsed.length; i++) {
            if (vysledek) {
                var vysledek = vysledek + ', ' + persons_parsed[i].replace(/[@]/g, '');
            } else {
                var vysledek = persons_parsed[i].replace(/[@]/g, '');
            }
        }
        $('#persons_jquery').val(vysledek);

ありがとう、ヤクブ

4

2 に答える 2

0

このコードで実行できる大幅なクリーンアップがあります。

不思議な「2番目を追加したときにのみ機能する」理由は!、ページが読み込まれたときではなく、キーアップでのみコードを実行していたためです。開始時にも実行すると、それが修正されます。

また、すべての keyup イベントでString プロトタイプに追加します! それは間違いなく悪い考えです。そして、あなたの単純なケースでは、これを多くの場所で再利用しない限り、おそらく String プロトタイプに追加する理由はまったくありません。

また、jQuery セレクターをキャッシュせず、keyup イベントごとに再実行します。最後に、出力の処理は必要以上に複雑です。Array.prototype.joinを検索することをお勧めします。

これらの問題を修正するフィドルのフォークはhttp://jsfiddle.net/CrossEye/6sR9B/にあります

これは関連するコードです:

$(document).ready(function () {
    var personPattern = /[@]+[\u00BF-\u1FFF\u2C00-\uD7FF\w| ]+[@]/g,
        tagPattern = /[\!]+[\u00BF-\u1FFF\u2C00-\uD7FF\w| ]+[\!]/g,
        $person = $('#persons_jquery'),
        $tag = $('#tags_jquery');
    var processForm = function () {
        var text = $('textarea.new-memory').val(),
            tags_parsed = text.match(tagPattern),
            persons_parsed = text.match(personPattern);
        $tag.val((tags_parsed || []).join(', ').replace(/[!]/g, ''));
        $person.val((persons_parsed || []).join(', ').replace(/[@]/g, ''));
    };
    $('textarea.new-memory').keyup(processForm);
    processForm();
});
于 2013-05-14T12:18:00.517 に答える