如何建立一個`generateSelector`函式來生成DOM元素的CSS選擇器路徑?


generateSelector 方法是一個非常有用的工具,可以確定網站特定部分(稱為DOM元素)的路徑。瞭解CSS選擇器的使用方法和構建方法在各種情況下都非常有用,例如測試自動化或構建快捷方式以方便選擇元素。在本文中,我們將討論該函式的概念並提供一個清晰的使用示例。

假設您想更改網站上的一個特定元素。但是,您如何知道要使用哪個選擇器呢?這就是我們的generateSelector函式發揮作用的地方!此函式將獲取網站上的特定元素,並提供我們可以用來更改它的選擇器。

理解CSS選擇器

在我們深入探討generateSelector函式的建立之前,務必瞭解什麼是CSS選擇器及其背後的原理。

CSS選擇器是用於選擇需要樣式化的頁面HTML元素的模式。它們是CSS樣式表的一個基本方面,是將樣式應用於特定元素的一種手段。

示例

以下CSS規則使用選擇器來定位頁面上的所有<p>元素並將color樣式屬性設定為紅色:

<!DOCTYPE html>
<html>
<head>
   <style>
      p {
         color: red;
      }
   </style>
</head>
<body>
   <p>This text will be red.</p>
</body> 
</html>

示例

CSS規則中的p是選擇器。CSS選擇器可以比元素的標籤名複雜得多。它們可用於根據元素的類、ID、屬性值等選擇元素。例如:

<!DOCTYPE html>
<html>
<head>
   <style>
      #main-header {
         background-color: blue;
      }
   </style>
</head>
<body>
   <header id="main-header">
      <h1>My website</h1>
   </header>
   <!-- other content here -->
</body>
</html>

此CSS規則選擇ID為“main-header”的元素,並將其“backgroundcolor: blue”樣式應用於它。

建立generateSelector函式

在介紹了CSS選擇器的概念之後,CSS選擇器是用於識別和定位網頁中需要樣式化的特定元素的方法,我們現在可以繼續建立generateSelector函式。此函式將接受DOM(文件物件模型)元素作為輸入,並返回該特定元素的CSS選擇器路徑。

語法

function generateSelector(element) {
   let selectors = [];
}

首先,我們將初始化一個名為“selectors”的空陣列。此陣列將用作我們遍歷並檢查其祖先元素時為給定DOM元素生成的 選擇器的容器。

語法

while (element) {
   let selector = '';
   if (element.tagName === 'HTML') {
      selector = 'html';
   }
}

當我們迭代每個祖先時,我們將為其生成一個選擇器。我們將首先檢查該元素是否為<html>元素。如果是,我們將字串'html'新增到selector變數中。

對於所有其他元素,我們將檢查該元素是否具有ID。如果具有,我們將使用ID作為選擇器。如果沒有,我們將使用元素的標籤名稱及其類名作為選擇器。

語法

else {
   if (element.id) {
      selector = '#' + element.id;
   } else {
      selector = element.tagName.toLowerCase();
      if (element.className) {
         selector += '.' + element.className.replace(/\s+/g, '.');
      }
   }
}

生成選擇器後,我們將將其新增到selectors陣列中,並透過將element設定為element.parentNode來移動到下一個祖先。

語法

selectors.unshift(selector);{
   element = element.parentNode;
}

最後,我們將使用join()方法連線selectors陣列中的所有選擇器,並將生成的CSS選擇器路徑作為字串返回。

語法

return selectors.join(' > ');{
}

使用generateSelector函式

現在我們已經實現了generateSelector函式,讓我們看看如何在實踐中使用它。

例如,假設您有以下HTML:

<!DOCTYPE html>
<html>
<body>
   <div id="myDiv">
      <p>Hello World</p>
   </div>
   <div id="result"></div>
   <script>
      function generateSelector(element) {
         let selectors = [];
         while (element) {
            let selector = '';
            if (element.id) {
               selector = '#' + element.id;
            } else {
               selector = element.tagName;
            }
            selectors.unshift(selector);
            element = element.parentNode;
         }
         return selectors.join(' > ');
      }
   </script>
   <script>
      window.onload = function(){
         
         // Select the <p> element and get its CSS selector path
         const p = document.querySelector("p");
         if(p!==null){
            const selector = generateSelector(p);
            document.getElementById("result").innerHTML = selector;
         }
         else{
            console.log("Error : Element not found");
         }
      }
   </script>
</body>
</html>

需要注意的是,這只是一個示例,選擇器將根據您傳遞給函式的元素以及HTML的結構而有所不同。

更新於:2023年2月21日

269 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.