๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Front-End/jQuery

jQuery ๊ธฐ์ดˆ ๋น ๋ฅด๊ฒŒ ํ›‘๊ธฐ

by bamDal 2022. 6. 2.
 
 

jQuery ๋ž€?

JavaScript์˜ Library(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) ์ด๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๊ตฌํ˜„์ด ์–ด๋ ค์šด ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด ๋ชจ์•„๋†“์€ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ
JS ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” jQuery, RequireJS, Prototype, AngluarJS, Backbone ๋“ฑ์ด ์žˆ๋‹ค.

 

๊ตณ์ด jQuery๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ?

1. ์‚ฌ์šฉ์ด ํŽธ๋ฆฌํ•˜๋‹ค.

 

2. Cross Browsing


- java๋Š” jdk๋ฅผ ๊น”์•„์„œ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ js๋Š” ๋”ฐ๋กœ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ ์—†์ด ์•Œ์•„์„œ ๋Œ์•„๊ฐ”๋‹ค. ์ฆ‰, ๋ธŒ๋ผ์šฐ์ €์— jsํ•ด์„๊ธฐ๊ฐ€ ๋ถ™์–ด์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด ํ•ด์„๊ธฐ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์˜ ์ข…๋ฅ˜๋‚˜ ๋ฒ„์ „๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด ๋ถˆํŽธํ•˜๋‹ค.

- jQuery๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ์„ค์ • ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋†“์•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

3. ๋‹ค์–‘ํ•œ Plugin

- jQuery๋ฅผ ๊ธฐ์ดˆ๋กœ ํ•˜๋Š” ์œ ์šฉํ•œ plugin์ด ๋งŽ๋‹ค.
- Bootstrap, jQuery UI, Pagination ๋“ฑ
- pagination์€ ๋‚˜์ค‘์— spring?ajax์—์„œ ๋ฐฐ์šธ paging ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

jQuery์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ํŠน์ • ์š”์†Œ๋ฅผ ํƒ! ์ฐ์–ด๋‚ด์„œ ๊ทธ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ ๋•Œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด ๋Œ€ํ‘œ์ ์œผ๋กœ selector ์ด๋‹ค.
selector ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ DOM, ๋ถ€๋ชจ-์ž์‹-ํ˜•์ œ ๊ด€๊ณ„, ํ•„ํ„ฐ๋ง ๋“ฑ์„ ์ด์šฉํ•ด์„œ ์š”์†Œ๋ฅผ ์„ ํƒํ•ด์˜ฌ ์ˆ˜์žˆ๋‹ค.

 

 

Selector (์„ ํƒ์ž)

: ์„ ํƒ์ž๋Š” css์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฑฐ์˜ ๊ฐ™๋‹ค.

Selector ์ •์˜
$("p") p ํƒœ๊ทธ์ธ ์š”์†Œ
$("#btn") id๊ฐ€ "btn"์ธ ์š”์†Œ
$(".btn") class๊ฐ€ "btn"์ธ ์š”์†Œ
$(this) ํ˜„์žฌ ์š”์†Œ ์„ ํƒ
$("p.intro") <p>ํƒœ๊ทธ ์ค‘์—์„œ class๊ฐ€ "intro"์ธ ์š”์†Œ
$("p:first") <p>ํƒœ๊ทธ ์ค‘์—์„œ ์ฒซ๋ฒˆ์งธ ์š”์†Œ
$("ul li:first") ์ฒซ๋ฒˆ์งธ <ul>์š”์†Œ ํ•˜์œ„์˜ ์ฒซ๋ฒˆ์งธ <li> ์š”์†Œ
$("ul li:first-child") ๋ชจ๋“  <ul>์š”์†Œ ํ•˜์œ„์˜ ์ฒซ๋ฒˆ์งธ <li> ์š”์†Œ
$("*") ๋ชจ๋“  ์š”์†Œ(element)์„ ํƒ
  • $("#btn") ์™€ $(".btn") : id๋Š” ๋‹จ ํ•˜๋‚˜, class๋Š” ์—ฌ๋Ÿฌ๊ฐœ์— ์ ์šฉ ๊ฐ€๋Šฅ ํ•˜๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ id๋ฅผ selectํ•˜๋ฉด ํ•œ ๊ฐœ์˜ ์š”์†Œ๊ฐ€ ์˜ค๊ณ , class๋ฅผ select ํ•˜๋ฉด ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์˜ค๋Š”๋ฐ ๋‘˜ ๋‹ค ๋ฐฐ์—ด์— ๋‹ด๊ฒจ์˜จ๋‹ค.
  • $("*") : ๋ณดํ†ต ๋‹จ๋…์œผ๋กœ ์“ฐ๋Š” ๊ฒฝ์šฐ๋Š” ์ž˜ ์—†๊ณ , div ์•ˆ์— ํŠน์ • ํด๋ž˜์Šค ์•ˆ์— ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์‹์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • $("ul li") : ul > li ์ฒ˜๋Ÿผ ์“ฐ๊ธฐ๋„ ํ•œ๋‹ค. ul ํƒœ๊ทธ์˜ ์ž์‹์š”์†Œ์ธ li ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  • $(this) :์ด๋ฒคํŠธ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

this ์‚ฌ์šฉ ์˜ˆ์‹œ

 

์†์„ฑ ํ•„ํ„ฐ ( ํŠน์ • ํƒœ๊ทธ์˜ ํŠน์ • ์†์„ฑ)

์˜ˆ์‹œ

์ง„ํŒŒ๋ž‘(a) : ํƒœ๊ทธ
ํ•˜๋Š˜์ƒ‰(href , target) : ์†์„ฑ
์ฃผํ™ฉ์ƒ‰(_blank) : ์†์„ฑ ๊ฐ’

Selector ์ •์˜
$("a[href]") a ํƒœ๊ทธ ์ค‘์—์„œ href ์†์„ฑ์ด ์žˆ๋Š” ์š”์†Œ
$("a[target='_blank']") a ํƒœ๊ทธ ์ค‘์—์„œ target ์†์„ฑ์ด _blank ์ธ ์š”์†Œ
$("a[target!='_blank']") a ํƒœ๊ทธ ์ค‘์—์„œ target์†์„ฑ์ด _blank๊ฐ€ ์•„๋‹Œ ์š”์†Œ
$(":button") button ํƒœ๊ทธ ๋˜๋Š” ์†์„ฑ์ธ ์š”์†Œ
$("tr:even") <tr>ํƒœ๊ทธ ์ค‘ ํ™€์ˆ˜ <tr>ํƒœ๊ทธ
$("tr:odd") <tr> ํƒœ๊ทธ ์ค‘ ํ™€์ˆ˜ <tr>ํƒœ๊ทธ
  • $(":button") : <button> ๋˜๋Š” <input type="button"> ์ธ ๊ฒฝ์šฐ
  • $("tr:even") ๊ณผ $("tr:odd") : 0๋ถ€ํ„ฐ ์‹œ์ž‘ -> 0์„ ์ง์ˆ˜๋กœ ๋ณธ๋‹ค.

 

 

 

DOM

Document Object Model

?

 

 

 

๋ถ€๋ชจ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•œ select ๋ฐฉ์‹

ํ˜•์‹ ์ •์˜
$(selector).parent(); ์„ ํƒํ•œ ์š”์†Œ(selector)์˜ ๋ฐ”๋กœ ์œ„์˜ ์š”์†Œ๋ฅผ ์„ ํƒ
$(selector).parents(selector); ์„ ํƒํ•œ ์š”์†Œ์˜ ์ƒ์œ„ ์š”์†Œ๋“ค ์ค‘ selector ์š”์†Œ๋“ค ๋ชจ๋‘ ์„ ํƒ
$(selector).parentsUntil(selector); ์„ ํƒํ•œ ์š”์†Œ์™€ ์ง€์ •ํ•œ ์š”์†Œ ์‚ฌ์ด์˜ ๋ถ€๋ชจ๋ฅผ ๋ชจ๋‘ ์„ ํƒ
$(selector).closest(selector); ์„ ํƒํ•œ ์š”์†Œ๋กœ๋ถ€ํ„ฐ ๋ถ€๋ชจ ์š”์†Œ๋“ค์„ ํƒ์ƒ‰, ๊ฐ€์žฅ ๋จผ์ € ๋ฐœ๊ฒฌํ•œ ์š”์†Œ๋ฅผ ์„ ํƒ
  • $("span").parents('div') : span ํƒœ๊ทธ์—์„œ๋ถ€ํ„ฐ html ๊นŒ์ง€ ๋ชจ๋“  div ์š”์†Œ๋ฅผ ์„ ํƒ
  • $("span").parentsUntil('.ancestors') : span ํƒœ๊ทธ์—์„œ๋ถ€ํ„ฐ class๊ฐ€ ancestors ์ธ ์š”์†Œ ์‚ฌ์˜์˜ ๋ชจ๋“  ๋ถ€๋ชจ ์š”์†Œ ์„ ํƒ, ๋‹น์‚ฌ์ž(span)์™€ ์ง€์ •๋œ ์š”์†Œ(.ancestors)๋Š” ์„ ํƒ์—์„œ ์ œ์™ธ๋œ๋‹ค.
  • $("#item").closest("div") : id๊ฐ€ item ์ธ ์š”์†Œ์—์„œ ์ƒ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ ๊ฑธ๋ฆฌ๋Š” ์ฒซ๋ฒˆ์งธ div ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.$('#item').parents("div") : id๊ฐ€ item ์ธ ์š”์†Œ์—์„œ ์ƒ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ ๊ฑธ๋ฆฌ๋Š” ๋ชจ๋“  div ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
 

 

 

 

์ž์† ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•œ select ๋ฐฉ์‹

์‚ฌ์šฉ๋ฒ• ์ •์˜
$(selector).children(); ์„ ํƒํ•œ ์š”์†Œ์˜ ๋ฐ”๋กœ ์•„๋ž˜์˜ ์š”์†Œ๋ฅผ ์„ ํƒ
$(selector).find(selector); ์„ ํƒํ•œ ์š”์†Œ์˜ ํ•˜์œ„ ์š”์†Œ๋“ค ์ค‘ ๊ฒ€์ƒ‰
  • $(".ancestors").find('span') : class ๊ฐ€ ancestors ์ธ ์š”์†Œ์˜ ์ž์‹๋“ค ์ค‘ span ํƒœ๊ทธ๋งŒ ์ฐพ์•„์˜จ๋‹ค.
  • $(".ancestors").children() : class ๊ฐ€ ancestors ์ธ ์š”์†Œ์˜ ๋ฐ”๋กœ ํ•˜์œ„ ์š”์†Œ๋“ค์„ ๊ฐ€์ ธ์˜จ๋‹ค.

class="ancestors"์ธ div ์˜ ๋ฐ”๋กœ ์•„๋ž˜ ์š”์†Œ๋“ค์€ ์ˆซ์ž๋กœ ํ‘œ์‹œํ•ด๋†“์€ 1,2 div ์ด๋‹ค. div ๋ฐ‘์— ์š”์†Œ๋“ค์€ ์ œ์™ธํ•˜๊ณ  ๋”ฑ ๋‘ ๊ฐœ์˜ div ๋งŒ ํ•ด๋‹นํ•œ๋‹ค.

 

 

 

ํ˜•์ œ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•œ select ๋ฐฉ์‹

  • $("h3").siblings() : ๋‹น์‚ฌ์ž(h3)๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋™์ผ์„ ์ƒ์˜ ์š”์†Œ๋“ค์„ ์„ ํƒํ•œ๋‹ค.
    $("h3").siblings().css({"background-color":"blue"}); 
    => ELEMENT 5 ๋ฅผ ์ œ์™ธํ•œ ELEMENT 1~4 , ELEMENT 6~9๋ฅผ ๋ชจ๋‘ ๋ฐฐ๊ฒฝ์ƒ‰์„ ํŒŒ๋ž€์ƒ‰์œผ๋กœ ํ•œ๋‹ค.
  • $("h3").next()  ์™€ $("h3").prev()  : h3๋ณด๋‹ค ํ•œ ์นธ ์•„๋ž˜ ์™€ ํ•œ ์นธ ์œ„
    => next : ELEMENT 6
    => prev : ELEMENT 4
  • $("h3").nextAll() ๊ณผ $("h3").prevAll() : h3๋ณด๋‹ค ์•„๋ž˜ ์™€ ์œ„
    => nextAll : ELEMENT 6~9
    => prevAll : ELEMENT 1~4
  • $("h3").nextUntil() ๊ณผ $("h3").prevUntil() : untill์€ ๋‹น์‚ฌ์ž์™€ ์„ ํƒํ•œ ์š”์†Œ๋Š” ์ œ์™ธ๋œ๋‹ค.
    => nextUntil() : ELEMENT 6~8
    => prevUntil() : ELEMENT 2~4

 

 

 

filtering์„ ์ด์šฉํ•œ ์„ ํƒ
 

  • $("div p").eq(0)) : div ์•„๋ž˜ p ํƒœ๊ทธ ์ค‘ 0๋ฒˆ์งธ ์š”์†Œ (์ธ๋ฑ์Šค ๊ฐœ๋…)
  • $("p").filter(".sel")) : p ์š”์†Œ ์ค‘ class ๊ฐ€ sel ์ธ ์š”์†Œ
    == $("p.sel")) 
  • $("p").not(".sel")) : p ์š”์†Œ ์ค‘ class๊ฐ€ sel์ด ์•„๋‹Œ ์š”์†Œ