jquery split()问题

时间:2011-10-04 00:03:58

标签: javascript jquery

希望这对某人来说很容易。

我有一组复选框,其值为1,2,3等,具有相同的名称属性(cp_bundle)。

我使用以下代码获取这些复选框的逗号分隔列表。

var hl_calling_plan_bundle = $('input[name="cp_bundle"]:checked').getCheckboxVal() || "";

jQuery.fn.getCheckboxVal = function(){
    var vals = [];
    var i = 0;
    this.each(function(){
        vals[i++] = jQuery(this).val();
    });
    return vals;
}

如果我检查第一个和第三个复选框,将返回以下内容:

1,3

然后,我想运行一个测试,看看返回的变量中是否存在特定值(例如“3”)

但是,我无法使用以下内容超越变量的分割:

var aCallingBundle = hl_calling_plan_bundle.split(",");

这给出了错误:

hl_calling_plan_bundle.split is not a function

知道发生了什么事吗?

4 个答案:

答案 0 :(得分:4)

hl_calling_plan_bundle是一个数组。您必须对其使用数组操作,而不是字符串操作。

如果你想知道值3是否在数组中,那么你必须在数组中搜索它。有很多方法可以搜索数组,但由于你有jQuery,所以很容易使用.inArray()函数:

var index = $.inArray(3, hl_calling_plan_bundle);
if (index != 1) {
    // found 3 in the array at index
}

顺便提一下,您可能希望简化您的功能:

jQuery.fn.getCheckboxVal = function(){
    var vals = [];
    this.each(function(){
        vals.push(this.value);
    });
    return vals;
}

或者这样:

jQuery.fn.getCheckboxVal = function(){
    return(this.map(function(){return(this.value)}).get());
}

答案 1 :(得分:1)

split()是一种String方法,Array上不存在。

当您说以下内容被返回1,3 时,您可能会隐式调用String的{​​{1}}方法,默认情况下{{1}使用逗号的数组成员。如果您明确调用toString()然后,则可以调用join(),但这将是反模式。

答案 2 :(得分:0)

您不需要拆分字符串,只需使用RegEx搜索:

var str = '1,3,22,5';

/\b1\b/.test(str);   // true
/\b2\b/.test(str);   // false
/\b3\b/.test(str);   // true
/\b5\b/.test(str);   // true
/\b22\b/.test(str);  // true

使其成为一种功能:

String.prototype.findVal = function(val){
                              var re = new RegExp('\\b' + val + '\\b');
                              re.lastIndex = 0;
                              return re.test(this);
                           };

str.findVal(2);    // false
str.findVal(22);   // true

答案 3 :(得分:0)

要获取复选框:

var cbs = document.getElementsByName('cp_bundle');

获取所有值和已检查值的数组:

var allValues = [];
var checkedValues = [];
for (var i=0, iLen=cbs.length; i<iLen; i++) {
  if (cbs[i].checked) checkedValues.push(cbs[i].value);
  allValues[i] = cbs[i].value;
}