如何使用 JavaScript 根据 data 属性的数值对元素进行排序?


通常,我们使用 JavaScript 的某些方法对数组、对象和其他一些数据类型进行排序。但是,在本文中,我们将对某个元素的子元素进行排序,这些子元素的值是无序的,并且使用这些子元素的 data 属性进行排序。

在本文中,我们将学习两种不同的方法或方法,根据其赋予的 data 属性的值对子元素进行排序。

我们用于排序的方法如下所示:

  • 使用getAttribute()方法选择 data 属性的值。

  • 使用dataset.percentage属性选择 data 属性的值。

让我们借助与每种方法关联的代码示例逐一详细讨论它们。

使用 getAttribute() 方法

getAttribute() 方法用于获取传递到其括号内的特定元素赋予的值。我们可以使用此方法比较赋予子元素的 data 属性的值。

语法

以下语法将向您展示如何使用 getAttribute() 方法获取传递属性的值:

var variable_name = selected_element.getAttribute(" attribute_name ");

让我们了解 getAttribute() 方法在实践中如何实现,以便根据其 data 属性值对子元素进行排序。

步骤

  • 步骤 1 - 在算法的第一步中,我们将向 HTML 文档添加一个输入元素,以从用户那里获取子元素的值,并将其 data 属性及其内容设置为用户输入的值。

  • 步骤 2 - 在下一步中,我们将添加一个div元素,在其中我们将使用 JavaScript 动态添加子元素,然后根据其 data 属性值对其进行排序。

  • 步骤 3 - 在此步骤中,我们将添加两个具有不同功能的不同按钮。第一个按钮将把子元素追加到上一步中定义的 div 标签中,而第二个按钮将根据其 data 属性值对这些子元素进行排序。

  • 步骤 4 - 在第四步中,我们将定义一个 JavaScript 函数,并将其作为上一步中定义的第一个按钮的 onclick 事件的值。在此函数中,我们正在创建子元素,将其文本以及值设置为与其 data 属性相同的值(与用户输入的值相同),然后对其进行排序。

  • 步骤 5 - 在下一步中,我们将定义另一个 JavaScript 函数,该函数将选择所有子元素一次,然后使用传递到 sort() 方法中的比较器函数根据 data 属性值对其进行排序。

  • 步骤 6 - 在最后一步中,我们将上一步中定义的函数分配给第三步中定义的第二个按钮的 onclick 事件的值。

示例

以下示例说明了如何使用 getAttribute() 方法获取子元素的 data 属性的值,并根据该值对其进行排序:

<!DOCTYPE html>
<html>
<body>
   <h2>Sort element by numerical value of data attribute using JavaScript</h2>
   <p>Set the data percentage property and the content of each child:</p>
   <input type = "number" id = "inp1" placeholder = "Data Percentage"> <br><br>
   <p id = "prev">The initial order of paragraph elements in the container element is:</p>
   <div id = "container"> </div>
   <button id = "add" onclick = "appendElement()">Append element to the parent element</button>
   <button id = "btn" onclick = "sortParent()">click to sort</button>
   <p id = "result"> </p>
   <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
   <script>
      var result = $("#result");
      var prev = $("#prev");
      var container = $("#container");
      function appendElement() {
         var inp1 = $("#inp1");
         var val1 = inp1.val();
         var num = Number(val1);
         var paras = $(" <p> </p> ").text(num);
         paras.addClass("childPara");
         paras.attr("data-percentage", num);
         paras.appendTo(container);
         inp1.val("");
      }
      function sortParent() {
         function cmp(x, y) {
            return x.getAttribute("data-percentage") - y.getAttribute("data-percentage");
         }
         var childElements = container.find(".childPara");
         var sortedChildElements = childElements.sort(cmp).appendTo(container);
         prev.html(" <b> The final sorted order of the child elements of the container element is: </b> ");
         result.html(" The elements are sorted finally. ");
      }
   </script>
</body>
</html>

在此示例中,我们在比较器函数cmp中使用了getAttribute()方法来比较赋予子元素的data-percentage属性的值。

使用 dataset.percentage 属性

dataset.percentage 属性用于获取赋予所选元素的data-percentage属性的值,然后我们可以使用此属性比较值并根据这些值对元素进行排序。

语法

以下语法用于使用 dataset.percentage 属性获取子元素的 data 属性的值:

Selected_element.data.percentage;

让我们借助代码示例在实践中了解它,并对元素的子元素进行排序。

方法

此示例的方法与上一个示例的算法非常相似。您只需要将上一个算法中 cmp 函数的getAttribute()方法语法替换为dataset.percentage属性语法即可比较子元素。

示例

以下示例将向您说明如何使用 dataset.percentage 属性比较每个子元素的 data 属性值并对其进行排序:

<!DOCTYPE html>
<html>
<body>
   <h2>Sort element by numerical value of data attribute using JavaScript</h2>
   <p>Set the data percentage property and the content of each child:</p>
   <input type = "number" id = "inp1" placeholder = "Data Percentage"><br><br>
   <p id = "prev"> The initial order of paragraph elements in the container element is:</p>
   <div id = "container"> </div>
   <button id = "add" onclick = "appendElement()">Append element to the parent element</button>
   <button id = "btn" onclick = "sortParent()">click to sort </button>
   <p id = "result"> </p>
   <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
   <script>
      var result = $("#result");
      var prev = $("#prev");
      var container = $("#container");
      function appendElement() {
         var inp1 = $("#inp1");
         var val1 = inp1.val();
         var num = Number(val1);
         var paras = $(" <p> </p> ").text(num);
         paras.addClass("childPara");
         paras.attr("data-percentage", num);
         paras.appendTo(container);
         inp1.val("");
      }
      function sortParent() {
         function cmp(x, y) {
            return x.dataset.percentage - y.dataset.percentage;
         }
         var childElements = container.find(".childPara");
         var sortedChildElements = childElements.sort(cmp).appendTo(container);
         prev.html(" <b> The final sorted order of the child elements of the container element is: </b> ");
         result.html(" The elements are sorted finally. ");
      }
   </script>
</body>
</html>

在以上示例中,我们使用了dataset.percentage属性来获取data-percentage属性的值,并根据这些属性的值对子元素进行排序。

结论

在本文中,我们学习了两种不同的获取 data 属性值并根据这些属性的值对其进行排序的方法。我们借助代码示例讨论了这些方法,以便在实践中实现它们,并使用这些方法对元素的子元素进行排序。

更新于: 2023年11月20日

464 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告