【问题标题】:jQuery retrieve multiple .attr() on pagejQuery 在页面上检索多个 .attr()
【发布时间】:2015-06-07 04:11:56
【问题描述】:

这里是新手 - 我知道我在这里遗漏了一些简单的东西。

目标是使用 data-orgid 属性从这个 a href 中检索 orgid。

<a class="claim" href="http://www.url.com" id="orgAct-claim" data-orgid="111">Claim Your Listing</a>
<a class="claim" href="http://www.url.com" id="orgAct-claim" data-orgid="222">Claim Your Listing</a>
<a class="claim" href="http://www.url.com" id="orgAct-claim" data-orgid="333">Claim Your Listing</a>

我可以使用以下 jquery 检索第一个实例的属性。

// Click - Claim Your Listing
$( "#orgAct-claim" ).click(function() {
    // Acquire orig from onClick attribute and set orgid.
    var orgid = $('#orgAct-claim').attr('data-orgid');
    alert(orgid);
});

在这里提琴:https://jsfiddle.net/riverecho/0b7vpyw4/

= = = = =

更进一步,我可以通过将所有实例包装在另一个名为#listings 的id 中来使属性至少为每个实例触发。但是,每个 .click 事件总是返回“111”的第一个 orgid。

<div id="listings">
    <a class="claim" href="http://www.url.com" id="orgAct-claim" data-orgid="111">Claim Your Listing</a>
    <a class="claim" href="http://www.url.com" id="orgAct-claim" data-orgid="222">Claim Your Listing</a>
    <a class="claim" href="http://www.url.com" id="orgAct-claim" data-orgid="333">Claim Your Listing</a>
</div>

在这里提琴:https://jsfiddle.net/riverecho/w5eqguok/

= = = = =

如何将 var 设置为我单击的特定实例:分别为 111、222 或 333?

【问题讨论】:

    标签: javascript jquery attr


    【解决方案1】:

    首先,ID 应该是唯一的。所以不要有相同的ID。如果需要,请使用类。但是,在这种情况下,您可以使用在回调中传递的 this,如下所示:

    $( "#orgAct-claim" ).click(function() {
        var orgid = $(this).attr('data-orgid');
        alert(orgid);
    });
    

    【讨论】:

    • 谢谢阿米特·乔基。非常简单的 $(this) 可以走很长的路!我会尽快接受。
    【解决方案2】:

    您的 ID 应该始终是唯一的,因此我删除了它们。此外,您可以在 click 函数中使用 $(this) 来返回被点击的元素。由于您也可能不想转到锚标记中指定的 href,因此我使用 event.preventDefault() 来阻止这种情况发生。

    $(function() {
      $(".claim").click(function(event) {
        // Acquire orig from onClick attribute and set orgid.
        var orgid = $(this).attr('data-orgid');
        alert(orgid);
        event.preventDefault();
      });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <a class="claim" href="http://www.url.com" data-orgid="111">Claim Your Listing</a>
    <a class="claim" href="http://www.url.com" data-orgid="222">Claim Your Listing</a>
    <a class="claim" href="http://www.url.com" data-orgid="333">Claim Your Listing</a>

    【讨论】:

    • 谢谢罗伯特!我喜欢您在解决方案中删除重复 ID 的方式。
    【解决方案3】:

    根据 W3C 规范,具有相同 ID 的多个元素不是有效的 html。

    当您的 CSS 选择器只有一个 ID 选择器时,jQuery 使用本机 document.getElementById 方法,该方法仅返回具有该 ID 的第一个元素。

    如果必须通过重复 ID 进行选择,请使用属性选择器:

    $('a[id="orgAct-claim"]');
    

    请查看jQuery ID Selector

    所以在你的情况下,正如 Amit Joki 建议的那样,你可以使用:

    $('a[id="orgAct-claim"]').click(function() {
        var orgid = $(this).attr('data-orgid');
        alert(orgid);
    });
    

    【讨论】:

    • 感谢 Kishor 提供有关具有相同 ID 的多个元素的额外信息。我们希望尽可能保持代码合规。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多