0

ここに非表示の入力フィールドがあります

<input type="hidden" value="php,php mysql" id="tags"/>

また、ユーザーが新しいタグを追加できる通常の入力ボックスもあります。ユーザーが追加したい新しいタグが既に追加されているかどうかを確認したいのですが、すでに追加されている場合は、alert('already there') ;

これが私のコードです:

var already_added = $('#tags_final').val().toLowerCase();
new_tag = new_tag.toLowerCase();
if (already_added.indexOf(new_tag) < 0){
// add it, everything is OK
}else{
alert('already there');
}

上記は通常の値で問題なく機能します。たとえば、「php」を追加しようとすると、これはアラートになります(「すでにあります」)。問題は、「mysql」を追加すると、アラートが送信されるためです。 「phpmysql」で見つかりますが、「mysql」は別のタグであり、追加する必要があります。これに対してどのような解決策が思い浮かびますか?

ご協力いただきありがとうございます

4

4 に答える 4

5

これを別々の部分に分割して、実際のタグ自体で全文比較を実行することをお勧めします。

var tags = $('#tags_final').val().toLowerCase().split(',');
new_tag = new_tag.toLowerCase();

if ($.inArray(new_tag, tags) < 0) {
    // add it
} else {
    alert('already there');
}

var tags = $('#tags_final').val().toLowerCase().split(',');
new_tag = new_tag.toLowerCase();

if (tags.indexOf(new_tag) < 0) {
    // add it
} else {
    alert('already there');
}

編集:@nybblerの好意により、これは彼のコメントにリンクされているjqueryinArrayメソッドを使用するとより正確になります。

于 2012-11-14T19:43:33.570 に答える
1

indexOf文字列を直接使用する方が、正規表現や配列に分割するよりも高速だと思います(に依存している場合はさらに高速です$.inArray)。

タグの文字列をコンマでラップalready_addedし、タグを検索するときに同じことを行いindexOfます。

var already_added = ',' + $('#tags_final').val().toLowerCase() + ',';
new_tag = new_tag.toLowerCase();

if (already_added.indexOf(',' + new_tag + ',') < 0) {
    // add it
} else {
    alert('already there');
}

このアイデアは、jQueryで使用されている同様のトリックから得ました。

于 2012-11-14T19:41:34.023 に答える
0

中かっこ[php][phpmysql]の間にタグを保存して検索します

var already_added = $('#tags_final').val().toLowerCase();
new_tag = new_tag.toLowerCase();
if (already_added.indexOf("["+new_tag+"]") < 0){
// add it, everything is OK
}else{
alert('already there');
}
于 2012-11-14T19:41:46.940 に答える
0

次のような関数を使用して、カンマ区切りのキー文字列でキーを検索できます。

function contains(keys, key) {
  var i = 0, k = key.length;
  for (var i = 0;(i = keys.indexOf(key, i)) != -1; i += k) {
    if ((i == 0 || keys.charAt(i - 1) == ',') && (i + k == keys.length || keys.charAt(i + k) == ',')) {
      return true;
    }
  }
  return false;
}

デモ: http: //jsfiddle.net/Guffa/UHH9V/

于 2012-11-14T19:57:41.583 に答える