programing tip

$ .each ()가 모든 항목을 반복하지 않는 이유는 무엇입니까?

itbloger 2021. 1. 9. 09:36
반응형

$ .each ()가 모든 항목을 반복하지 않는 이유는 무엇입니까?


pre클래스와 함께 10 개의 요소를 포함하는 다음 마크 업이 있습니다 indent.

​<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>
<pre class="indent"></pre>​

다음 jQuery .each()함수를 사용하여 각 요소를 반복합니다.

​$(function(){    
    $.each(".indent", function(index){
       alert(index); 
    });    
});​

10 개의 알림이 표시 될 것으로 예상하지만 7 개만 표시됩니다.

-바이올린 참조-


그러나 이것은 예상대로 작동합니다 $(".indent").each().

$(function(){    
    $(".indent").each(function(index){
       alert(index); 
    });    
});​

-바이올린 참조-


$.each()문서를 보면 차이점이 있음을 이해합니다.

$ .each () 함수는 jQuery 객체를 독점적으로 반복하는 데 사용되는 $ (selector) .each ()와 다릅니다.

하지만이 경우 왜 모든 요소를 ​​반복하지 않는지 이해할 수 없습니다.

왜 이런 일이 발생합니까?


$.each(".indent", function(index){

의 요소를 반복하지 않습니다 $('.indent')하지만 이상 ".indent"길이가 7 개 문자입니다 문자열입니다.

참조 참조


jQuery 소스 코드를 기반으로 한 자세한 설명 :

jQuery는 먼저 첫 번째 매개 변수 obj(여기서는 문자열)에 다음이 있는지 확인합니다 length.

var ...
        length = obj.length,
        isObj = length === undefined || jQuery.isFunction( obj );

length가 있고 함수가 아닌 문자열 isObjfalse입니다.

이 경우 다음 코드가 실행됩니다.

for ( ; i < length; ) {
    if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
        break;
    }
}

따라서 함수가 주어지면 f다음 코드는

$.each(".indent", f);

다음과 같다

for (var i=0; i<".indent".length; i++) {
    var letter = ".indent"[i];
    f.call(letter, i, letter);
}

(당신이 사용하는 문자를 기록 할 수 있습니다 var f = function(i,v){console.log(v)};또는 미묘한 생각 나게 하나 call사용 var f = function(){console.log(this)};)


문자열을 반복하고 있으므로 객체 또는 배열을 $.each메서드에 전달해야합니다 .

$(function(){    
    $.each($(".indent"), function(index){
       alert(index);
    });    
});

$ .each는 데이터 컬렉션을 반복합니다. 7 개의 문자가있는 문자열을 전달하므로 각 문자에 대해 반복됩니다. 사용 예를 참조하십시오.

$.each([52, 97], function(index, value) { 
  alert(index + ': ' + value); 
});

ReferenceURL : https://stackoverflow.com/questions/13648515/why-doesnt-each-iterate-through-every-item

반응형