Documentï¼querySelector() æ¹æ³
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since â¨2015å¹´7æâ©.
Document ç querySelector() æ¹æ³å峿件ä¸ç¬¬ä¸å符åæå® CSS 鏿卿ä¸çµ CSS 鏿å¨ç Elementãå¦ææ²ææ¾å°å¹é
é
ï¼ååå³ nullã
å¹é æ¯ä½¿ç¨æ·±åº¦åªå ååºéæ·ä¾é²è¡çï¼å¾æä»¶æ¨è¨ä¸ç第ä¸åå ç´ éå§ï¼ä¾æåç¯é»çæ¸éé åºï¼ä¾åºéæ·æä»¶ä¸çç¯é»ã
妿æå®ç鏿å¨å¹é äºå¨æä»¶ä¸è¢«é¯èª¤å¤æ¬¡ä½¿ç¨ç IDï¼ååå³å ·æè©² ID ç第ä¸åå ç´ ã
CSS å½å ç´ æ°¸é 䏿åå³ä»»ä½å ç´ ã
èªæ³
querySelector(selectors)
忏
selectors-
å å«ä¸åæå¤å鏿å¨çåä¸²ãæ¤åä¸²å¿ é æ¯ææç CSS 鏿å¨å串ï¼å¦æä¸æ¯ï¼åææåº
SyntaxErrorä¾å¤ã注æ HTML è¦ç¯ä¸¦ä¸è¦æ±å±¬æ§å¼æ¯ææç CSS èå¥ç¬¦ã妿
classæid屬æ§å¼ä¸æ¯ææç CSS èå¥ç¬¦ï¼é£éº¼å¨é¸æå¨ä¸ä½¿ç¨å®ä¹åï¼ä½ å¿ é å°å ¶é²è¡è½ç¾©ï¼å¯ä»¥ééå¼å«CSS.escape()æä½¿ç¨è½ç¾©åå ä¸æè¿°çæè¡ä¹ä¸é²è¡è½ç¾©ãåè¦è½ç¾©å±¬æ§å¼ç¯ä¾ã
åå³å¼
ä¸å Element ç©ä»¶ï¼è¡¨ç¤ºæä»¶ä¸ç¬¬ä¸å符åæå® CSS 鏿å¨çå
ç´ ï¼å¦ææ²æå¹é
é
ï¼ååå³ nullã
å¦æä½ éè¦ç¬¦åæå®é¸æå¨çææå
ç´ çæ¸
å®ï¼æè©²ä½¿ç¨ querySelectorAll()ã
ä¾å¤
SyntaxErrorDOMException-
ç¶æå®ç鏿å¨èªæ³ç¡æææåºã
ç¯ä¾
>æ¥æ¾å¹é é¡å¥ç第ä¸åå ç´
卿¤ç¯ä¾ä¸ï¼å峿件ä¸ç¬¬ä¸åå
·æé¡å¥ myclass çå
ç´ ï¼
const el = document.querySelector(".myclass");
è¤é鏿å¨
鏿å¨ä¹å¯ä»¥é常強大ï¼å¦ä»¥ä¸ç¯ä¾æç¤ºãé裡å峿件ä¸ä½æ¼é¡å¥çºãuser-panel mainãç <div>ï¼<div class="user-panel main">ï¼å
§ï¼å稱çºãloginãç第ä¸å <input> å
ç´ ï¼<input name="login"/>ï¼ï¼
const el = document.querySelector("div.user-panel.main input[name='login']");
åå
ç±æ¼ææ CSS 鏿å¨å䏲齿¯ææçï¼ä½ ä¹å¯ä»¥åå鏿å¨ï¼
const el = document.querySelector(
"div.user-panel:not(.main) input[name='login']",
);
éå°é¸æä¸åç¶å
ç´ çºå
·æ user-panel é¡å¥ä½æ²æ main é¡å¥ç div ç輸å
¥å
ç´ ã
è½ç¾©å±¬æ§å¼
æ¤ç¯ä¾é¡¯ç¤ºï¼å¦æ HTML æä»¶å
å«ä¸å䏿¯ææç CSS èå¥ç¬¦ç idï¼é£éº¼å¨ querySelector() ä¸ä½¿ç¨å®ä¹åï¼æåå¿
é å°å±¬æ§å¼é²è¡è½ç¾©ã
HTML
å¨ä»¥ä¸ç¨å¼ç¢¼ä¸ï¼ä¸å <div> å
ç´ ç id æ¯ "this?element"ï¼é䏿¯ææç CSS èå¥ç¬¦ï¼å çº "?" åå
å¨ CSS èå¥ç¬¦ä¸ä¸è¢«å
許ã
æåéæä¸åæéåä¸åç¨æ¼è¨éé¯èª¤ç <pre> å
ç´ ã
<div id="this?element"></div>
<button id="no-escape">ä¸è½ç¾©</button>
<button id="css-escape">CSS.escape()</button>
<button id="manual-escape">æåè½ç¾©</button>
<pre id="log"></pre>
CSS
div {
background-color: blue;
margin: 1rem 0;
height: 100px;
width: 200px;
}
JavaScript
ç¶é»æéä¸åæéæï¼å®å齿åè©¦é¸æ <div>ï¼ç¶å¾å°å
¶èæ¯é¡è²è¨å®çºé¨æ©å¼ã
- 第ä¸åæéç´æ¥ä½¿ç¨
"this?element"å¼ã - 第äºåæé使ç¨
CSS.escape()å°å¼é²è¡è½ç¾©ã - 第ä¸åæéééåæç·é¡¯å¼è½ç¾©
"?"åå ãæ³¨æï¼æåéå¿ é 使ç¨å¦ä¸ååæç·ä¾è½ç¾©åæç·æ¬èº«ï¼åæ¯ï¼"\\?"ã
const log = document.querySelector("#log");
function random(number) {
return Math.floor(Math.random() * number);
}
function setBackgroundColor(id) {
log.textContent = "";
try {
const element = document.querySelector(`#${id}`);
const randomColor = `rgb(${random(255)} ${random(255)} ${random(255)})`;
element.style.backgroundColor = randomColor;
} catch (e) {
log.textContent = e;
}
}
document.querySelector("#no-escape").addEventListener("click", () => {
setBackgroundColor("this?element");
});
document.querySelector("#css-escape").addEventListener("click", () => {
setBackgroundColor(CSS.escape("this?element"));
});
document.querySelector("#manual-escape").addEventListener("click", () => {
setBackgroundColor("this\\?element");
});
çµæ
é»æç¬¬ä¸åæéæç¢çé¯èª¤ï¼è第äºåå第ä¸åæéåè½æ£å¸¸å·¥ä½ã
è¦ç¯
| Specification |
|---|
| DOM > # ref-for-dom-parentnode-queryselectorâ > |