2014-03-27 4 views
4

나는 이것에 약간 어려움을 겪고있다. 이 경우htmlCollection을 반복하는 방법

functionOne: function(){ 
     $('#myTExtbox-' + budgetLine.attr('id')).on('change keyup paste', function(){ 
      that.mySecondFunction(this); 
     }); 
} 

상기 this는 내부 div하는 table에있는하는 textbox이다 골격,이 같은 기능이있다. 그런 다음 :

mySecondFunction: function(tb){ 
     var tbody = tb.parentElement.parentElement.parentElement.parentElement.parentElement; 
     //gets main parent, which is a tbody, inside a table, inside a div 

} 

나는 다음 각 행을 통해 이동하여 특정 셀의 textbox을 찾기 위해, tbody을 반복합니다. 문제는이 코드가 다음과 같습니다.

$.each(tbody, function(index, item){ 
     cost = item; 
     var t= index; 
    }); 

아무 항목이나 표시되지 않는 것 같습니다. 내가 좋아하는 뭔가를 수행하려고 할 경우이 예에서 :

item.getElementById('test'); 

를 오류가 발생합니다 :

TypeError: Object #<HTMLCollection> has no method 'getElementById' 

왜 내에서이 객체와 접근 객체를 반복 할 수 없습니까? 기본적으로 http://jsfiddle.net/HX8RL/14/

, 무엇을 어떻게해야하는 것은 이것이다 :

감사

UPDATE 여기

은 바이올린의 텍스트 상자 변경, 나는 결핵의 모든 행을 반복 할 때 부모 테이블에 저장하고 모든 Tb 값을 합산합니다. 마음에두고, 모든 결핵은 같은 세포 위치에있어, 내가 포함하고 싶지 않은 다른 장소에 다른 결절이있을 수 있기 때문에.

+0

시도 항목 [인덱스] .getElementById ('테스트')이 작동하는지; – Ashutosh

+1

응답 해 주셔서 감사합니다. 예, 아무런 노력을하지 않았습니다. – jason

+0

바이올린 만들기. – Ashutosh

답변

2

얻을 직접 모든 입력 요소를

$.each(tbody.children('tr'), function(index, item){ 
     cost = item; 
     var t= index; 
    }); 

Demo Fiddle

+0

"잡히지 않은 TypeError : 객체 # 의 속성 'children'이 함수가 아닙니다." – jason

+1

사실, 이로 인해 최종 해결책이 나왔습니다. tbody.children ('tr') 대신 tbody.rows입니다. 감사합니다 – jason

+0

[2015 년 12 월] 검색 중에이 답변을 찾았지만 제 목적으로는 작동하지 않았습니다. 이것에 걸려 넘어 질 수있는 다른 사람들을 위해, htmlcollection을 반복하는 작업은 기본 javascript for loop였습니다. 건배. –

0

여기 몇 가지 잘못된 점이 있다고 생각합니다. 페이지 당 하나의 ID 만 가질 수 있다는 것을 알고 있습니까? 그래서 document.getElementByid('test')을 대신해야합니다.

jQuery도 사용하고 있으므로 찾기 기능 item.find('#test')을 사용할 수 있습니다. 그러나 이것이 문제를 해결하지 못할 것이라고 생각합니다. 당신이 무엇을 달성하기를 원하는지 확신하지 못했을 것입니다, 당신이 당신의 문제가 무엇인지 더 자세히 설명한다면 당신을 도울 수 있습니다.

는 또한

tb.parentElement.parentElement.parentElement.parentElement.parentElement; 

는 내가 설정 fiddle을했습니다

$(tb).parents('tbody'); 

(jQuery를에)과 같이 쓸 수있다, 어쩌면 당신을 도울 수 있습니다.

코드 바이올린에 사용 :

var myFuncs = (function() { 

    function funcA() { 
     $('input').on('keyup', function() { 
      funcB(this); 
     }); 
    } 

    function funcB(myInput) { 
     var $table = $(myInput).parents('table'); 

     $table.find('tr > td > input').each(function() { 
      var $input = $(this); 

      if($(myInput).attr('id') != $input.attr('id')) 
       $input.val("I'm called from another input"); 
     }); 
    } 

    return { 
     funcA : funcA 
    } 

})(); 

myFuncs.funcA(); 
1

대신 반복 처리를 children()를 사용해보십시오 TBody 의 수집이있을 실 거예요 값.

var tbody = tb.parentElement.parentElement.parentElement; 
    alert(tbody.id); 
    var input = $('#tbody').find('input'); 
    alert(input); 
    console.log(input); 
    for (var i = 0; i < input.length; i++) { 
     alert(input[i].value); 
     alert(i); 
    } 

는 fiddle- 참조 http://jsfiddle.net/HX8RL/18/