CSS Selector
注意querySelector系列的參數是使用CSS selector規則,但getElementsXXX系列的不是
querySelector系列不接受數字開頭的id、class命名,但getElementsXXX系列接受
程式碼放在最後面,Okay,Let's start!
點號
A.B,如div.class、.class.class等,select同時符合的所有node
空格
A B,select有B且其為A的子(子)層
逗號
A, B,select有A或者B的
大於符號
A > B,select A的直接子層(不含子子層)中所有有B的
加號
A + B,select A的直接子層(不含子子層)中第一個有B的
波浪符號
A ~ B,select所有同階層前方為A的B
中括號內放屬性
[attribute],屬性選擇符基本款
以OO開頭的屬性值
[attribute^='OO']
以OO結尾的屬性值
[attribute$='OO']
包含OO在內的屬性值
[attribute*='OO']
更多的select方法,如冒號類的,請看W3C
<!DOCTYPE html>
<html>
<body>
<div id="container" class="the-container">
<div id="1st-wrapper" class="the-1st-wrapper" title="first wrapper">
<div class="2nd-wrapper">
<ul class="inner-2nd-wrapper">
<li id="1st-li" class="good inner-2nd-wrapper" title="first inner li">1st li</li>
<li id="2nd-li" class="good inner-2nd-wrapper" title="second inner li">2nd li</li>
<li id="3rd-li" class="bad inner-2nd-wrapper">3rd li</li>
</ul>
</div>
<ul>
<li class="good outer-2nd-wrapper">1st li(outer)</li>
<li class="good outer-2nd-wrapper">2nd li(outer)</li>
<li class="good outer-2nd-wrapper">3rd li(outer)</li>
</ul>
<ul></ul>
</div>
</div>
<script type="text/javascript">
var obj = document.querySelectorAll("li");
//所有<li>,[6]
console.log(obj);
var obj = document.querySelectorAll(".good.inner-2nd-wrapper");
//同時有.good且.inner-2nd-wrapper,[2]
console.log(obj);
var obj = document.querySelectorAll(".inner-2nd-wrapper.good");
//同時有.inner-2nd-wrapper且.good,[2],[2]
console.log(obj);
var obj = document.querySelectorAll(".good .inner-2nd-wrapper");
//有.inner-2nd-wrapper且其為.good的子(子)層,所以為空[]
console.log(obj);
// var obj = document.querySelectorAll(".2nd-wrapper");
//會報錯,因為querySelector系列不能搜尋以digit開頭命名
// console.log(obj);
var obj = document.getElementsByClassName("2nd-wrapper inner-2nd-wrapper");
//.2nd-wrapper且.inner-2nd-wrapper,所以為空[]
console.log(obj);
var obj = document.querySelectorAll(".the-container .inner-2nd-wrapper");
//有.inner-2nd-wrapper且其為.the-container的子(子)層,[4]
console.log(obj);
//注意getElementsByClassName和querySelectorAll同樣是class空格class,但選擇規則不同!
var obj = document.getElementsByClassName("good inner-2nd-wrapper");
//good且inner-2nd-wrapper,所以為空[]
console.log(obj);
var obj = document.querySelectorAll(".good, .inner-2nd-wrapper");
//所有good或inner-2nd-wrapper,[7]
console.log(obj);
var obj = document.querySelectorAll(".the-container > .good");
//.the-container下直接子層(不含子子層)有.good的,所以為空[]
console.log(obj);
var obj = document.querySelectorAll(".inner-2nd-wrapper > .good");
//.inner-2nd-wrapper下直接子層(不含子子層)有.good的,[2]
console.log(obj);
var obj = document.querySelectorAll(".inner-2nd-wrapper + .good");
//.inner-2nd-wrapper下直接子層(不含子子層)有.good的第一個,[1]
console.log(obj);
var obj = document.querySelectorAll(".the-container + .good");
//.the-container下直接子層(不含子子層)有.good的第一個,所以為空[]
console.log(obj);
var obj = document.querySelectorAll(".the-1st-wrapper ~ ul");
//所有同階層前方為.the-1st-wrapper的<ul>,所以為空[]
console.log(obj);
var obj = document.querySelectorAll("div ~ ul");
//所有同階層前方為<div>的<ul>,[2]
console.log(obj);
var obj = document.querySelectorAll(".good ~ .inner-2nd-wrapper");
//所有同階層前方為.good的.inner-2nd-wrapper,[2]
console.log(obj);
var obj = document.querySelectorAll("[title]");
//所有有title這個attribute的node,[3]
console.log(obj);
var obj = document.querySelectorAll("li[title]");
//所有li有title這個attribute的node,[2]
console.log(obj);
var obj = document.querySelectorAll("[title='first wrapper']");
//所有有title這個attribute的node,[1]
console.log(obj);
var obj = document.querySelectorAll("[title^='first']");
//所有有以'first'開頭的title attribute的,[2]
console.log(obj);
var obj = document.querySelectorAll("[title$='li']");
//所有有以'li'結尾的title attribute的,[2]
console.log(obj);
var obj = document.querySelectorAll("[title*='st']");
//所有有包含字串'st'的title attribute的,[2]
console.log(obj);
</script>
</body>
</html>