요소의 선택
제이쿼리를 사용하면 손쉽게 HTML 요소를 선택하여, 선택된 요소에 특정 동작을 설정할 수 있습니다.
제이쿼리에서는 요소를 선택하기 위해 대부분의 CSS 선택자뿐만 아니라 몇몇 비표준 선택자까지 제공하고 있습니다.
CSS 선택자를 이용한 선택
제이쿼리에서는 CSS 선택자를 사용하여 HTML 요소를 선택할 수 있습니다.
태그 이름을 사용하여 같은 태그 이름을 가지는 HTML 요소를 모두 선택할 수 있습니다.
이것은 자바스크립트의 getElementsByTagName() 메소드와 같은 동작을 합니다.
예제
$(function() {
$("p").on("click", function() { // <p>요소를 모두 선택함.
$("span").css("fontSize", "28px"); // <span>요소를 모두 선택함.
});
});
$() 함수에 전달되는 인수는 반드시 따옴표("")를 사용한 문자열 형태로 전달되어야 합니다.
아이디(id)를 사용하여 특정 HTML 요소를 선택할 수도 있습니다.
이것은 자바스크립트의 getElementsById() 메소드와 같은 동작을 합니다.
예제
$(function() {
$("p").on("click", function() {
$("#jq").css("border", "2px solid orange"); // 아이디가 "jq"인 요소를 선택함.
});
});
클래스(class)를 사용하여 같은 클래스에 속하는 HTML 요소를 모두 선택할 수 있습니다.
이것은 자바스크립트의 getElementsByClassName() 메소드와 같은 동작을 합니다.
예제
$(function() {
$("p").on("click", function() {
$(".jq").css("backgroundColor", "lightgray"); // 클래스가 "jq"인 요소를 모두 선택함.
});
});
속성(attribute)을 사용하여 속성이 조건에 맞는 특정 HTML 요소를 선택할 수 있습니다.
예제
$(function() {
$("button").on("click", function() { // <img>요소 중에서 alt 속성값이 "flower"인 요소를 모두 선택함.
$("img[alt='flower']").attr("src", "/examples/images/img_monalisa.png");
});
});
제이쿼리 선택자
제이쿼리에서는 CSS 선택자뿐만 아니라 몇몇 비표준 선택자까지도 사용할 수 있습니다.
이러한 비표준 선택자를 사용하면 선택한 요소를 저장하거나, 그 결과에 대해 필터링까지 할 수 있습니다.
선택한 요소의 저장
제이쿼리에서는 선택한 요소들을 변수에 저장하여 사용할 수 있습니다.
다음 예제는 문서 내의 모든 <li>요소를 선택하여 변수에 저장한 후, 해당 변수를 사용하는 예제입니다.
예제
$(function() {
var items = $("li"); // <li>요소를 모두 선택하여 변수 items에 저장함.
$("button").on("click", function() {
$("#len").text("저장된 <li>요소의 총 개수는 " + items.length + "개 입니다.");
});
});
하지만 이렇게 저장된 요소들은 변수에 저장될 당시의 요소들만 저장됩니다.
즉, 요소가 저장된 이후에 문서에 추가되거나 삭제된 요소들을 자동으로 갱신하지는 않습니다.
선택한 요소의 필터링
제이쿼리에서는 선택한 요소 중에서 더욱 세분화된 선택을 하기 위한 필터링을 진행할 수 있습니다.
다음 예제는 문서 내의 모든 <li>요소 중에서 <span>요소를 가지고 있는 요소만을 선택하는 예제입니다.
예제
$(function() {
$("button").on("click", function() {
$("li:has(span)").text("<span>요소를 가지고 있는 아이템이에요!");
});
});
input 요소의 선택
제이쿼리에서는 입력 양식에 관련된 특정 요소를 손쉽게 선택할 수 있습니다.
예제
$(function() {
$("button").on("click", function() {
// 체크되어 있는 요소를 모두 선택함.
$(":checked").next().text("체크되어 있는 요소는 이 요소입니다.");
});
});
getter 메소드와 setter 메소드
선택자에 의해 선택된 요소의 값을 읽거나 설정하기 위해서는 제이쿼리 메소드를 통해 해당 요소에 접근해야만 합니다.
getter 메소드는 선택된 요소에 접근하여 그 값을 읽어오기 위한 메소드입니다.
이러한 getter 메소드는 아무런 인수를 전달하지 않고 호출합니다.
setter 메소드는 선택된 요소에 접근하여 그 값을 설정하기 위한 메소드입니다.
이러한 setter 메소드는 대입하고자 하는 값을 인수로 전달하여 호출합니다.
다음 예제는 <h1>요소에 접근하여 그 값을 읽어들인 후, 아이디가 "text"인 요소의 값을 해당 값으로 설정하는 예제입니다.
예제
$(function() {
$("button").on("click", function() {
① var newText = $("h1").html(); // <h1>요소의 텍스트를 읽어오는 getter 메소드
② $("#text").html(newText); // id가 "text"인 요소에 새로운 텍스트를 설정하는 setter 메소드
});
});
위 예제의 ①번 라인처럼 .html() 메소드에 인수를 전달하지 않고 호출하면, 해당 HTML 요소에서 값을 읽어오는 getter 메소드로 사용됩니다.
하지만 ②번 라인처럼 인수를 전달하고 호출하면, 해당 HTML 요소에 새로운 값을 설정하는 setter 메소드로 사용됩니다.
메소드 체이닝(method chaining)
getter 메소드는 선택된 요소의 값을 읽어서 그 값을 반환합니다.
만약 선택된 요소가 여러 개 존재하면, getter 메소드는 가장 '첫 번째 요소'의 값만을 반환할 것입니다.
하지만 setter 메소드는 선택된 '모든 요소'에 인수로 전달된 값을 설정합니다.
그리고 선택된 모든 요소에 접근할 수 있는 또 다른 제이쿼리 객체를 반환합니다.
이렇게 반환된 제이쿼리 객체를 이용하면 세미콜론(;)을 사용하지 않고도, 곧바로 다른 제이쿼리 메소드를 호출할 수 있습니다.
이런 방식으로 여러 개의 메소드가 연속으로 호출되는 것을 메소드 체이닝(method chaining)이라고 합니다.
다음 예제는 선택된 요소에 .find(), .eq(), .html() 메소드를 연속으로 호출하는 예제입니다.
예제
$(function() {
$("button").on("click", function() {
// id가 "list"인 요소의 자손 요소 중에서 <li>요소를 모두 선택한 후에,
// 그 중에서 두 번째 요소의 값을 설정함.
$("#list").find("li").eq(1).html("두 번째 아이템을 선택했어요!!");
});
});
eq() 메소드는 선택한 요소 중에서 지정된 인덱스에 해당하는 요소를 선택하는 메소드입니다.
메소드 체이닝 도중에 .end() 메소드를 사용하면 바로 이전에 선택했던 요소의 집합을 다시 선택할 수 있습니다.
예제
$(function() {
$("button").on("click", function() {
$("#list") // id가 "list"인 요소의 자손 요소 중에서
① .find("li") // <li>요소를 모두 선택한 후에,
② .eq(1).html("두 번째 아이템을 선택했어요!!") // 그 중에서 두 번째 요소의 값을 설정함.
③ .end() // 다시 id가 "list"인 요소의 자손 요소 중에서 <li>요소를 모두 선택한 후에,
④ .eq(2).html("세 번째 아이템도 선택했어요!!"); // 그 중에서 세 번째 요소의 값을 설정함.
});
});
위 예제의 ②번 라인에서는 .eq() 메소드를 사용하여 ①번 라인에서 .find() 메소드로 선택한 요소의 집합 중 두 번째 요소를 선택합니다.
그리고 ③번 라인에서 .end() 메소드를 사용하여 .eq() 메소드를 사용하기 이전 집합을 다시 선택하고 있습니다.
따라서 ④번 라인에서 또다시 .eq() 메소드를 사용하여 요소를 선택할 수 있게 됩니다.
.width() 메소드와 .height() 메소드
제이쿼리에서는 선택한 요소의 너비나 높이를 반환하거나 설정하기 위한 .width() 메소드와 .height() 메소드를 제공합니다.
예제
$(function() {
$("#getter").on("click", function() {
① var size = "너비는 " + $("#box").width() + "px이고, 높이는 "
+ $("#box").height() + "px입니다.<br>";
$("#text").html(size);
});
$("#setter").on("click", function() {
② w = $("#box").width();
③ h = $("#box").height();
④ $("#box").width(w/2).height(h/2);
⑤ var size = "너비는 " + $("#box").width() + "px이고, 높이는 "
⑥ + $("#box").height() + "px로 변경되었습니다.<br>";
$("#text").html(size);
});
});
위의 예제에서는 선택한 요소의 너비와 높이 값을 얻기 위해 ①번부터 ③번, ⑤번과 ⑥번 라인까지 .width() 메소드와 .height() 메소드를 getter 메소드로 사용하고 있습니다.
하지만 ④번 라인에서 .width() 메소드와 .height() 메소드는 인수를 전달받아 너비와 높이 값을 설정하기 위한 setter 메소드로 사용하고 있습니다.
.attr() 메소드
.attr() 메소드는 선택한 요소의 특정 속성값을 반환하거나 설정하기 위해 사용합니다.
예제
$(function() {
$("button").on("click", function() {
// <img>요소의 src 속성값을 읽어오는 getter 메소드
① var imgSrc = $("img").attr("src");
// <img>요소의 src 속성값을 새로운 값으로 설정하는 setter 메소드
② $("img").attr("src", "/examples/images/img_flag.png");
});
});
위 예제의 ①번 라인에서는 .attr() 메소드에 인수를 하나만 전달하여, 해당 HTML 요소에서 인수로 전달받은 이름의 속성값을 읽어오는 getter 메소드로 사용하고 있습니다.
하지만 ②번 라인에서는 인수를 두 개 전달하여, 해당 HTML 요소에 첫 번째 인수로 전달받은 이름의 속성값으로 두 번째 인수로전달받은 값을 설정하는 setter 메소드로 사용하고 있습니다.
'jQuery' 카테고리의 다른 글
jQuery 요소의영역 (0) | 2020.07.03 |
---|---|
jQuery 요소의탐색 (0) | 2020.07.03 |
jQuery 요소의조작 (0) | 2020.07.03 |
jQuery 기본 (0) | 2020.07.03 |
jQuery 기초 (0) | 2020.07.03 |
댓글