隨筆記。
一些常用或容易忘的 API
$('selector1, selector2, selectorN')
選取多個元素(就跟 CSS 的概念相同)
1 2 3 4 5 6 7 8 9
| <div class="parent"> <p class="p1">P1</p> <p>P2</p> <div class="child"> <p>P3</p> <p>P4</p> </div> <section></section> </div>
|
1 2
| console.log($('.parent, .p1'))
|
get()
把 jQuery 物件變成 DOM 元素(陣列):
1
| <div class="parent"></div>
|
1 2 3 4
| console.log($('.parent'))
console.log($('.parent').get())
|
find('selector')
選到所有子孫元素(多層)
1 2 3 4 5 6 7 8
| <div class="parent"> <p>P1</p> <p>P2</p> <div class="child"> <p>P3</p> <p>P4</p> </div> </div>
|
1 2 3
|
$('.parent').find('p').css('background-color', 'red')
|
children(['selector'])
選到所有子元素(一層)
1 2 3 4 5 6 7 8
| <div class="parent"> <p>P1</p> <p>P2</p> <div class="child"> <p>P3</p> <p>P4</p> </div> </div>
|
1 2
| console.log($('.parent').children())
|
裡面也可以再塞新的 selector:
1 2 3 4 5 6 7
| const tagNames = $('.parent') .children('p') .get() .map((elem) => elem.tagName)
console.log(tagNames)
|
JavaScript:
1 2
| console.log(document.querySelector('.parent').children)
|
contents()
選出所有子元素(包含文字節點)
1 2 3 4 5 6 7 8
| <div class="parent"> <p>P1</p> <p>P2</p> <div class="child"> <p>P3</p> <p>P4</p> </div> </div>
|
jQuery:
1 2
| console.log($('.parent').contents())
|
JavaScript:
1 2
| console.log(document.querySelector('.parent').childNodes)
|
attr('attrName', 'attrValue')
設定屬性
jQuery:
1 2
| $('div').attr('tooltip', '請輸入內容')
|
JavaScript:
1 2
| document.querySelector('div').setAttribute('tooltip', '請輸入內容')
|
removeAttr('attrName')
刪除屬性
jQuery:
1
| $('div').removeAttr('tooltip')
|
JavaScript:
1
| document.querySelector('div').removeAttribute('tooltip')
|
$('parent').append()
把東西放到父元素裡(最後面)
1 2 3 4 5
| <div class="container"> <div>1</div> <div>2</div> <div>3</div> </div>
|
1 2 3 4 5 6 7 8 9 10
| $('.container').append( $('<button>', { id: 'myId', class: 'myClass', text: 'click Me', on: { click: () => console.log('click') } }) )
|
$('child').appendTo()
把自己放到父元素裡(最後面)
1 2 3 4 5
| <div class="container"> <div>1</div> <div>2</div> <div>3</div> </div>
|
1 2 3 4 5 6 7 8
| $('<button>', { id: 'myId', class: 'myClass', text: 'click Me', on: { click: () => console.log('click') } }).appendTo('.container')
|
$('child').prependTo()
把自己放到父元素裡(最前面)
1 2 3 4 5
| <div class="container"> <div>1</div> <div>2</div> <div>3</div> </div>
|
1 2 3 4 5 6 7 8
| $('<button>', { id: 'myId', class: 'myClass', text: 'click Me', on: { click: () => console.log('click') } }).prependTo('.container')
|
$('parent').prepend()
把東西放到父元素裡(最前面)
1 2 3 4 5
| <div class="container"> <div>1</div> <div>2</div> <div>3</div> </div>
|
1 2 3 4 5 6 7 8 9 10
| $('.container').prepend( $('<button>', { id: 'myId', class: 'myClass', text: 'click Me', on: { click: () => console.log('click') } }) )
|
1
| <div class="sibling"></div>
|
1
| $('.sibling').after($('<div>after</div>'))
|
1
| <div class="sibling"></div>
|
1
| $('.sibling').before($('<div>before</div>'))
|
siblings()
選出所有的兄弟元素(但不包含自己)
1 2 3 4 5 6 7 8 9 10
| <div> <button class="brother">兄弟一</button> <button>兄弟二</button> <button>兄弟三</button> <button>兄弟四</button> <div> 兄弟五 <button>不是兄弟</button> </div> </div>
|
1 2
| console.log($('.brother').siblings())
|
1 2 3 4 5
| <div> <div>兄弟</div> <button class="brother">兄弟一</button> <a>兄弟</a> </div>
|
1 2
| console.log($('.brother').next())
|
1 2 3 4 5 6 7
| <div> <div>兄弟</div> <button class="brother">兄弟一</button> <a>兄弟</a> <section>兄弟</section> <article>兄弟</article> </div>
|
1 2
| console.log($('.brother').nextAll())
|
1 2 3 4 5
| <div> <div>兄弟</div> <button class="brother">兄弟一</button> <a>兄弟</a> </div>
|
1 2
| console.log($('.brother').prev())
|
1 2 3 4 5 6 7
| <div> <a>兄弟</a> <section>兄弟</section> <article>兄弟</article> <button class="brother">兄弟一</button> <div>兄弟</div> </div>
|
1 2
| console.log($('.brother').prevAll())
|
hasClass(className)
有沒有包含這個 class
jQuery:
1 2
| $('el').hasClass('classNmae')
|
JavaScript:
1
| element.classList.contains('className')
|
closest(selector)
找出第一個符合選取器的父元素
jQuery:
1 2
| $(element).closest('parent')
|
JavaScript:
1 2
| element.closest('parent')
|
jQuery:
1 2 3 4
| $('input').val();
$('input')val('');
|
JavaScript:
1 2 3 4
| document.querySelector('input').value
document.querySelector('input').value = ''
|
remove()
刪除元素(包含自己)
和 JavaScrip 幾乎一樣:
on('event', 'selector', function)
事件監聽器,重點是 delegate 比較方便:
jQuery:
1 2 3 4
| $('element').on('click', 'child', (e) => { console.log('click') })
|
JavaScript:
1 2 3 4 5 6
| document.querySelector('element').addEventListener('click', (e) => { if (e.classList.contains('className')) { console.log('click') } })
|
jQuery:
JavaScript:
1
| document.querySelector('parent').innerHTML = ''
|
或參考:DOM 清除所有的子元素
serialize()
把表單欄位值轉成 url 字串,通常用在用 $.ajax 傳送資料:
1 2 3 4 5 6
| $form = $('.form') $form.on('submit', () => { const formData = $('.form').serialize() console.log(formData) })
|
- 用
attr
1
| $('.btn').attr('disabled', 'disabled')
|
- 用
prop
(property 推薦)
1
| $('.btn').prop('disabled', ture)
|
怎麼用 $.ajax 的 POST 送表單格式資料
詳細可參考 用 jQuery 發 AJAX
1 2 3 4 5 6 7 8 9 10 11
| const formData = new FormData($('form')) $.ajax({ url: `https://api.com`, type: 'POST', data: formData, contentType: false, processData: false, success: (data) => callback(null, data), error: (err) => callback(err) })
|
建立 DOM 元素,並插入
jQuery 不用像 JavaScript 還要 createElement
,而是直接 $(<div></div>)
來產生:
1 2 3 4 5
| <div class="container"> <div>1</div> <div>2</div> <div>3</div> </div>
|
1 2 3
| $(`<div> <p>yoyoyo</p> </div>`).appendTo('.container')
|
甚至還可以設定屬性、監聽器:
1 2 3 4 5 6 7 8 9 10
| $('<button>', { id: 'myId', class: 'myClass', title: 'myTitle', tooltip: '請輸入訊息', text: 'Click Me', on: { click: () => console.log('click') } }).appendTo('.conainer')
|
append 的另外一種用途
可以拿來「移動元素」,簡單來說就是先 select 畫面上的元素,再把它 append 到別的地方。
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
| <style> body { display: flex; justify-content: center; align-items: center; padding-top: 60px; } div { padding: 20px; margin: 20px; } div.box-red { border: 2px solid red; } div.box-blue { border: 2px solid slateblue; } </style> <div class="box-red"> <ul> <li>item</li> <li>item</li> <li>item</li> </ul> </div> <div class="box-blue"></div> <button>Move it.</button>
|
1 2 3 4 5 6 7 8 9
| $(document).ready(function () { $('button').on('click', function () { if ($('ul').parent().hasClass('box-red')) { $('ul').appendTo($('.box-blue')) } else { $('ul').appendTo($('.box-red')) } }) })
|