項目裡要做個一個checkbox關鍵字的防止重複功能,使用js解決的思路如下:
1、擷取所有checkbox的text,然後放在數組內
2、輸入關鍵字迴圈數組,使用indexOf判斷
說明:因為checkbox的text中可能出現特殊字元,所以要把特殊字元處理掉
var str = "keyWrod";
var ch = /[\u4E00-\u9FA5\uF900-\uFA2D]/;var symbol =/([.*+?^${}()|[\]\/\\])/;for(var i=0;i<str.length;i++){ var c = str.charAt(i); if (ch.test(c)){
alert(c); }
if(symbol.test(c)){
alert(c)
}}
-------------------------------分割線-----------------------
完整代碼如下(代碼中迴圈判斷有點多,本人JS能力有限,希望有人能提供其它解決思路或方法):
function checkKeyWords(){ var keyWordsArray = []; //checkboxlist name var objArray = ['industrialCatalogue','businessCatalogue','industrialCatalogue']; keyWordsArray = getAllKeyWords(objArray,keyWordsArray); var keyword ;
var companyCatalogueDesc = $("#companyCatalogueDesc").val().toLowerCase( );//擷取輸入內容
var ch = /[\u4E00-\u9FA5\uF900-\uFA2D]/;
var symbol =/([.*+?^${}()|[\]\/\\][0-9])/;
var en = /[a-z]/;
var descStr = "";
for(vari=0;i<companyCatalogueDesc.length;i++){
c = companyCatalogueDesc.charAt(i);
if((!symbol.test(c)&&ch.test(c))||en.test(c)){
descStr = descStr+c;
}
}
descStr = descStr.toUpperCase();
for ( var i = 0; i < keyWordsArray.length; i++) {
if(keyWordsArray[i]!=undefined){
keyword = keyWordsArray[i];
if(descStr.indexOf(keyword)>-1){
alert("類別重複,請從上面選擇");
$("#keyText").focus();
return ;
}
}
}
}
//擷取頁面元素所有關鍵字function getAllKeyWords(objArray,keyWordsArray){ var keyWord; for ( var i = 0; i < objArray.length; i++) { $("input[name='"+objArray[i]+"']").each(function(){ keyWord = $("label[for='"+$(this).attr('id')+"']").text(); keyWordsArray.push(getChildKeyWord(keyWord,keyWordsArray)); }) } return keyWordsArray;}//擷取元素中特殊字元分割出的關鍵字function getChildKeyWord(keyWord,keyWordsArray){ var s2=""; var ch = /[\u4E00-\u9FA5\uF900-\uFA2D]/; var symbol =/([.*+?^${}()|[\]\/\\])/; for(var i=0;i<keyWord.length;i++){ var c = keyWord.charAt(i); if(symbol.test(c)&&!ch.test(c)){ s2 = keyWord.substr(0,i); keyWord = keyWord.substr(i+1,keyWord.length); if(s2!=""){ keyWordsArray.push(getChildKeyWord(keyWord,keyWordsArray)); } }else{ s2 = s2+c; } } if(s2!=""){ return s2; }}
-------------------------------分割線-----------------------
本來想在後台使用Lucene使用分詞來判斷,但是Lucene用的不熟悉並且客戶催的緊,所以使用了JS的方式。有時間用Lucene試試。
2012/09/14修改說明:
把擷取輸入內容companyCatalogueDesc中的字元與數字過濾掉,然後在進行關鍵詞匹配。代碼比較,可以進行重構。切勿直接copy+c/v,重構後在應用