일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 목차만들기
- MYSQL
- 더존ERP
- codeigniter
- python
- 메일
- crontab
- 트랜젝션
- JavaScript
- vscode
- 유효성
- 핑
- erp
- 정규표현식
- 포트
- sendmail
- MSSQL
- js
- 리눅스
- 문자열
- 정규식
- ping
- php
- 이메일주소
- 자바스크립트
- 핑테스트
- jquery
- port
- sp_who
- pingtest
- Today
- Total
ioerror
[jQuery] 제이쿼리의 시작, 노드 선택자 정리 본문
들어가며.
jQuery 처음 생겨났을 때 DOM 선택자가 CSS의 선택 방식과 동일하여 많은 인기를 얻었었고 그만큼 DOM 노드에 쉽게 접근 할수 있다
선택자 규약(?)이 많은 편이지만 외울 필요는 없을 거 같다. 많은 것들 중에 자주 사용하는 것은 자동적으로 외워지고, 이런 게 필요한데 하고 찾아보면 있기 때문이다. 그리고 선택자, 필터 등을 조합하면 다 찾을 수 있다. 물론 그렇게 안되도록 간결한 html 문서를 작성해야 하겠지만 말이다.
공식 문서에 잘 되어 있지만, 지금까지 아무 생각 없이 사용하던 것을 정리하는 차원에서 기록 한다.
jQuery API Documentation - Selectors
1. 기본 선택자
jQuery 의 DOM 노드(요소, 엘리먼트, Element)를 선택하는 것은 스타일 시트의 CSS 선택 방식과 동일하다.
스타일 시트에서 a 태그의 색을 지정시 a {color: #dddddd} 라고 한다면 jquery에서는 $('a').css('color','#dddddd'); 로 설정하면 된다.
$('a')
// 모든 a 노드(anchor)
$('#link1')
// 아이디가 link1인 노드(id='link1')
$('.link2')
// 클래스 속성에 link2가 있는 모든 노드
$('div a')
// div 요소 안에 있는 모든 a 노드
$('div > a')
// div 바로 아래(자식)에 있는 모든 a 노드
$('div, span, a.link1')
// 콤마(,)로 구분하여 지정된 모든 노드, 각 노드는 독립적으로 선택된다.
$('ul.list > li:nth-child(n)')
// list를 클래스로 하는 ul의 자식 노드 li 중 1을 시작으로 n번째 노드를 선택
$('ul > li:first-child')
// 첫번째 li 노드를 선택
$('ul > li:last-child')
// 마지막 li 노드를 선택
$('ul.list > li:even')
// list를 클래스로 하는 ul의 자식 노드 li 중 0을 포함한 짝수번째 노드들을 선택
$('ul.list > li:odd')
// list를 클래스로 하는 ul의 자식 노드 li 중 홀수번째 노드들을 선택
$('ul > li:eq(n)')
// 0으로 시작하는 인덱싱으로 n번째 li 노드를 선택 jQuery 3.4 버전 부터 사용되지 않는다.
// 아래의 선택자를 사용해야 한다.
$('ul > li').eq(n)
$('ul > li:gt(n)')
// 0로 시작하여 n번째 이후 li 노드들을 선택, 3.4 버전 부터 사용되지 않으며 아래의 함수를 사용해야 한다.
$('ul > li').slice(n)
$('ul > li:lt(n)')
// :gt와 반대이며 0으로 시작하는 인덱스 중 n번째 요소 이전 것을 선택, 역시 3.4부터 사용안함
$('ul > li').slice(0,n)
$('span:empty')
// 노드에 공백, 자식노드, 텍스트 등이 아무것도 없는 것을 선택
$('span:parent')
// empty와 반대로 뭔가가 있는 것을 선택
$('div:has(p)')
// 자식 노드로 p를 가진 div 노드를 선택
$('div:not(.block)')
// 지정된 노드 중 not 안의 속성값이 아닌 노드를 선택
$("span:contains('Test')")
// 지정된 문자가 있는 노드를 선택(대소문자 구분함)
$("div[data|='test']")
// 속성 data의 값이 test 이거나 "test-"로 시작하는 값을 가진 div 노드
$("div[data*='test']")
// 속성 data의 값이 test 문자열과 동일하거나 포함한 값을 가진 div 노드
$("div[data~='test']")
// 속성 data의 값에 띄어쓰기 기준으로 여러 문자들 중 온전한 test가 있는 div 노드
// 가능한 경우 data='test' data='this is test' data='test is done'
// 선택 안되는 경우 data='test-time' data='test1'
$("div[data$='test']")
// data 속성이 test로 끝나는 div 노드
$("div[data^='test']")
// data 속성이 test로 시작하는 div 노드
$("div[data!='test']")
// data 속성 값이 test가 아닌 div 노드
$("div[data='test']")
// data 속성 값이 test인 div 노드
$('td#first').closest('tr')
// td#first 노드에서 상위 노드들 중 가장 가까운(첫번째) tr 노드를 선택
이것 보다 많지만 자주 사용하던 것들만 추려 보았다.
2. 폼노드 관련 선택자
폼은 많이 사용하기도 하지만 자주 잊어버리거나 헷갈리는 부분들이 많았다. 역시 자주 사용하는 것들을 기록한다.
$(':button')
// 버튼을 선택한다.
$(':checkbox')
// 체크박스를 선택한다.
$(':checked')
// 체크박스 또는 라디오 버튼 중에 체크된 노드를 선택
$(':disabled')
// 폼요소들 중에 disabled 설정된 노드들을 선택
$(':enabled')
// :disabled 의 반대로 활성화 된 것을 선택
$(':file')
// type='file' 인것을 선택
$(':image')
// type='iamge'
$(':input')
// 모든 폼요소 input, textarea, select, button 선택
$(':password')
// type='password'
$(':radio')
// type='radio'
$(':reset')
// type='reset'
$(':selected')
// select 노드의 option 중에 selected 된 것을 선택
$(':submit')
// type='submit'
$(':text')
// type='text'
3. 응용편
3-1. 이메일 입력 받기를 선택하면 이메일 주소 입력창을 활성화하기
<label><input type="checkbox" name="email_enabled" value="1"> 이메일 주소 입력 받기</label>
<input type="text" name="email_userid" placeholder="이메일 아이디" disabled>
@
<input type="text" name="email_domain" placeholder="이메일 도메인" disabled>
$("input:checkbox[name='email_enabled']").click(function(){
$("input[name^='email']").prop("disabled", ! $(this).is(":checked")).eq(1).focus();
})
$("input:checkbox[name='email_enabled']")
는 체크박스 중에서 name 속성이 email_enabled 인 노드를 선택해서 클릭 이벤트를 생성한다.
$("input[name^='email']")
input 노드 중 name이 email로 시작하는 노드를 선택하는데 2개가 된다.
.eq(1).focus()
선택된 2개의 노드 중 첫번째에 포커싱한다.
3-2. 검색 폼에서 분류를 체크박스로 해서 분류 전체를 선택한 경우 나머지 분류는 비활성화 하기
<laberl><input type='checkbox' name='category' value='all'>전체</lable>
<laberl><input type='checkbox' name='category' value='notebook'>노트북</lable>
<laberl><input type='checkbox' name='category' value='desktop'>데스크탑</lable>
<laberl><input type='checkbox' name='category' value='monitor'>모니터</lable>
$("input:checkbox[name='category[]']").eq(0).click(function(){
$("input:checkbox[name='category[]']").slice(1)
.prop('disabled', $(this).is(':checked'));
})
$("input:checkbox[name='category[]']").eq(0)
분류 체크박스 중 첫번째 노드를 선택할 경우
$("input:checkbox[name='category[]']").slice(1)
첫번째 이후 모든 분류 체크박스를 선택하여 비활성화
3-3. 테이블 목록에서 체크박스를 체크하면 해당 row 의 배경색을 변경하기
<table id="student_lists">
<tr>
<td><input type='checkbox' name='checkit[]' class='selected-students' valuie='1'></td>
<td>홍길동</td>
</tr>
<tr>
<td><input type='checkbox' name='checkit[]' class='selected-students' valuie='2'></td>
<td>홍길동</td>
</tr>
<tr>
<td><input type='checkbox' name='checkit[]' class='selected-students' valuie='3'></td>
<td>홍길동</td>
</tr>
<tr>
<td><input type='checkbox' name='checkit[]' class='selected-students' valuie='4'></td>
<td>홍길동</td>
</tr>
</table>
$("#student_lists input.selected-students").click(function(){
$tr = $(this).closest("tr");
if($(this).is(':checked')){
$tr.css('background','#ffff00');
}else{
$tr.css('background','');
}
})
$("#student_lists input.selected-students")
: 아이디가 #student_lists 인 노드의 자식 노드 중 input 이면서 selected-students클래스를 가진 노드에 클릭 이벤트를 생성한다.
$(this).closest("tr")
: 클릭한 노드의 상위 노드들 중 첫번째 tr을 선택하여 생상을 변경한다.
'JavaScript' 카테고리의 다른 글
[jQuery] 티스토리 목차(TOC) 만들기 - 2 (0) | 2020.12.09 |
---|---|
[jQuery] 티스토리에 내용 목차(TOC) 만들기 (0) | 2020.11.29 |
[JS] 이메일 주소 유효성 확인하기(feat. 정규식) (0) | 2020.06.13 |
[JS] 전화번호 검사하기 (0) | 2019.12.29 |
[JS] 자바스크립트 쿠키 굽기 - cookie (0) | 2019.12.07 |