2012-11-14 13 views
0

在這裏,我有一個隱藏的輸入字段的jQuery的indexOf更換

<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」,這也會發送警報,因爲它在「php mysql」中找到它,但「mysql」是另一個標記,它需要添加。有什麼解決方案想到這一點?

感謝您的幫助

+4

你可以在整個價值字符串分割成一個數組(分裂使用「,」vlaue),然後檢查數組中的每個元素的確切標記 – BadFeelingAboutThis

+0

@LondonDrugs_MediaServices'indexOf()'也適用於數組。 –

+1

@ŠimeVidas - 不在IE <9. –

回答

4

我想你會想打破這一成獨立的部分,並執行對全文進行比較實際標籤本身。

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的禮貌,這將使用在他的評論鏈接了jQuery inArray方法更準確。

+3

由於jQuery在這裏使用,你應該使用jQuery的inArray(http://api.jquery.com/jQuery.inArray/)而不是Array.indexOf,因爲它在IE中不可用<9 – nybbler

+0

@nybbler:謝謝你的。我之前沒有運行過這種方法(我沒有經常以這種方式遍歷數組)。我會發布反映該信息的更新。 –

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'); 
} 

我有這個想法從a similar trick used by jQuery

+0

@ZaheerAhmed--我沒有遵循你的邏輯;在我的回答中查看第一行代碼。 –

+0

@JosephSilber您可能會失去使用string.indexOf的性能提升,將會被需要的字符串連接取代。看到這個顯示Array.indexOf或jQuerys $的jsPerf測試(http://jsperf.com/strings-v-arrays)。inArray是最快的,這個解決方案是最慢的(在Chrome22,IE9和FF11中測試過) – nybbler

+0

@nybbler - 我認爲這是正確的,但我仍然不明白簡單的級聯如何比split更昂貴。 –

0

保存括號之間的標記[PHP] [PHP的MySQL] 並進行搜索

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'); 
} 
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/