项目里要做个一个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,重构后在应用