jQuery 오브젝트 Index 구하기

jQuery javascript

문제점 😅

여기 프로젝트에서 그리드 Tool로 내부 프레임 + jqGrid를 사용하는데, 사용자 편의성을 위해 row를 클릭 했을 때 체크박스가 체크되도록 해야 한다. row의 index는 어떻게 구할까?

해결책 😏

table의 td를 클릭 시, 해당 td가 속한 tr의 index를 알아야 한다.

$(function(){…})

$(function(){
	fnInit();
})

제이쿼리 document.ready()를 통해 화면 모두 로드된 후에 fnInit() 함수 호출.

fnInit(){…}

function fnInit() {
 var tdObj = $("div#codeMgtSimpleList > div:nth-child(2) > table.list > tbody:last-child > tr > td[name*=td_]");

 tdObj.bind("click", function(){
	 var idx = $(this).parent().index();
	 var scr = 'tr#'+idx+' > td[name="col_check"] > input[type="checkbox"]';
	 $(scr).trigger("click");
 });

 $('th[name="col_check"] > input[type="checkbox"]').trigger("click"); // ds 전체 선택 셋팅

 $('#codeGroupSe').focus();
}

간단하게 분석해보면…

var tdObj = $("div#codeMgtSimpleList > div:nth-child(2) > table.list > tbody:last-child > tr > td[name*=td_]");

우선 클릭 이벤트를 바인딩 할 오브젝트를 제이쿼리 선택자로 추출한다. td 중에서도 name이 td_로 시작하는 td에 대해서만 클릭 이벤트를 적용시킬 것이다.

tdObj.bind("click", function(){
	 var idx = $(this).parent().index();
	 var scr = 'tr#'+idx+' > td[name="col_check"] > input[type="checkbox"]';
	 $(scr).trigger("click");
 });

tbObj에 대해서 클릭 이벤트를 바인딩한다. 여기서 클릭한 대상인 $(this)는 td를 의미하므로 그 부모인 tr의 index를 가져와야 한다. 또한 tr의 id를 tr#[number] 형식이므로, 해당 tr을 선택자로 추출하여 click 트리거 처리했다.

마무리 😎

제이쿼리 선택자로 특정 데이터 추출해오는 부분은 프로젝트 내부 프레임 워크나 소스에 따라 다르므로 차근차근 잘 적용해야되는 부분이고, 보통 index 구하는 방법은 클릭 이벤트 안에서 $(this).index(); 또는 obj.index(this);로 구할 수 있다.

참고문헌 📝

https://m.blog.naver.com/teeny__/221430912469