2014-09-24 32 views
2

当我使用变量搜索与变量值相同的类名称的元素时,下面的.each循环不起作用。结果;没有警报发生。当迭代遍历具有动态类名称的元素时,JQuery .each循环不起作用

var NameString = $("#StoreInputs").val(); 
var NameArray = NameString.split(","); 
for(var i = 0; i < NameArray.length; i++){ 
$('.' + NameArray[i]).each(function(n, obj){ 
    alert(obj.val()); 
    }); 
} 
+0

记录'NameArray [i]'的值,并检查记录什么。我的假设是可能有一个领先的空间...检查控制台是否有任何错误.. – 2014-09-24 04:48:32

+0

尝试修剪类名' '' + $ .trim(NameArray [i])' – 2014-09-24 04:49:01

+0

嘿,非常感谢你的建议。这,特别是不是问题,虽然没有主角也没有尾随空格:) – user2993497 2014-09-24 05:46:14

回答

0

obj是原始输入,使用.val()你必须$(obj)它:

var NameString = $("#StoreInputs").val(); 
 
var NameArray = NameString.split(","); 
 
for(var i = 0; i < NameArray.length; i++){ 
 
    $('.' + NameArray[i]).each(function(n, obj){ 
 
    alert($(obj).val()); 
 
    }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input id="StoreInputs" value="cl2,cls1"/> 
 
<input class="cls1 cls2" value="in1"/> 
 
<input class="cls2" value="in2"/> 
 
<input class="cls1 cls3" value="in3"/>

有关信息obj == this

+2

您指出了事实,我需要将obj包装在jquery标签中。这就是问题所在。谢谢。 – user2993497 2014-09-24 05:48:48

0

纠正你.each()循环:

而不是

$('.' + NameArray[i]).each(function(n, obj){ 
    alert(obj.val()); 
}); 

尝试

$('.' + NameArray[i]).each(function(index,value){ 
    alert($(value).val()); 
}); 

编辑: -

DEMO

0

尝试

var NameString = $("#StoreInputs").val(); 
var NameArray = NameString.split(","); 
for (var i = 0; i < NameArray.length; i++) { 
    //trim the class name to remove any leading spaces 
    $('.' + $.trim(NameArray[i])).each(function (n, obj) { 
     //obj is a dom element reference, so doesn't have the val() method 
     //so wrap it using jQuery object 
     alert($(obj).val()); 
    }); 
} 
0

更改您的foreach这个

$('.' + NameArray[i]).each(function(){ 
    alert($(this).val()); 
}); 

你循环每个HTML,而不是一个javascript数组对象。有jQuery中我们NameArray

的所有元件中的两个类型的 eachjQuery.each.each

jQuery.each如果阵列,如果要循环

jQuery.each(NameArray, function(index, value) { 
    alert(value); 
}); 

。每之一,如果对于t他指定

$('.' + NameArray[i]).each(function(){ 
    alert($(this).val()); 
}); 

这里循环HTML元素给出的标识符是FIDDLE DEMO证明它

<input type="text" id="classlist" value="class1,class2" /> 
<ul> 
    <li class="class1">TEXT 1</li> 
    <li class="class2">TEXT 2</li> 
    <li class="class3">TEXT 3</li> 
    <li class="class3">TEST 4</li> 
</ul> 
<div id="eachContent"> 
    Contents retrieved using .each 
</div> 
<div id="jqueryeachContent"> 
    Contents retrieved using jQuery.each 
</div> 
<script> 
    jQuery(document).ready(function(){ 
     // Using jQuery.each looping of array 
     var nameArray = jQuery('#classlist').val().split(','); 
     jQuery.each(nameArray, function(index, value) { 
      $('.' + value).each(function(){ 
       jQuery("#eachContent").html(jQuery("#eachContent").html() + '<br>' + $(this).text()); 
      }); 
     }); 
     // using .each looping of elements 
     $('.class3').each(function(){ 
      jQuery("#jqueryeachContent").html(jQuery("#jqueryeachContent").html() + '<br>' + $(this).text()); 
     }); 
    }); 
</script>