【问题标题】:Get ID of .selected class without clicking无需点击即可获取 .selected 类的 ID
【发布时间】:2014-05-18 13:54:13
【问题描述】:

我想获取已归类为 .selected 的链接的 ID。 我找到了几个解决方案,但它们不起作用,或者它们包含点击功能和“this”。 我不想使用任何点击功能,因为当我打开页面时,已经选择了一个链接。

这是我的列表,最好是列表的 ID,而不是链接

        <ul id="dates">
            <li id="all"><a id="all" href="#all">1943-2003</a></li>
            <li id="li1943" ><a id="a1943" href="#1943">1943</a></li>
            <li id="li1953" ><a id="a1953" href="#1953">1953</a></li>
            <li id="li1963" ><a id="a1963" href="#1963">1963</a></li>
            <li id="li1973" ><a id="a1973" href="#1973">1973</a></li>
            <li id="li1983" ><a id="a1983" href="#1983">1983</a></li>
            <li id="li1993" ><a id="a1993" href="#1993">1993</a></li>
            <li id="li2003" ><a id="a2003" href="#2003">2003</a></li>
        </ul>

我在 jquery 中试过这个

    var selectYear = $("#dates").closest(".selected").attr("id");

还有这个

    var selectYear = $("#dates li a.selected").attr("id");

注意:我更改了 HTML 标记

【问题讨论】:

  • ID 必须是唯一的,这是无效的 HTML 标记
  • 而且ID不能以数字开头。
  • @Terry 正确,如果应该应用某些特定样式,则不应该因为 CSS 仍然不支持它作为 ID 选择器,不像 HTML5
  • 您何时何地添加“选定”类?

标签: jquery class attr selecteditem


【解决方案1】:
var li = $("#dates a.selected").parent();
var selectedYear = li.attr('id');

或者如果你不需要 li 对象:

var selectedYear = $("#dates a.selected").parent().attr('id')

更新

我认为您需要创建一个函数来获取所选年份:

function getSelectedYear() {
    return $("#dates a.selected").parent().attr('id');
}

现在您可以在点击和页面加载功能中使用它:

$('#myButton').click(function() {
    var selectedYear = getSelectedYear();
    // ...
});

$(function() {
    var selectedYear = getSelectedYear();
    // ...
});

【讨论】:

  • 这个工作,没有']' ;) 除了我通过点击函数将 .selected 类动态添加到我的链接,所以这段代码也需要在点击函数中。我不想不需要点击来查看是否添加了所选的类。有没有办法可以在点击功能之外扫描 .selected 类。
  • @lottebijl 由于您在多个地方需要 selectedYear,因此最好创建一个函数来获取它。查看我的更新。
【解决方案2】:

使用以下代码:

var selectYear = $("#dates li.selected a").attr("id");

【讨论】:

    【解决方案3】:

    像这样尝试.find()

    var selectYear = $("#dates").find("a.selected").attr("id");
    

    var selectYear = $("#dates").find("a.selected")[0].id;
    

    注意:

    在同一页面中,每个 ID 都应该是唯一的,但在您的标记代码中,您可以看到 &lt;li&gt;&lt;a&gt; 的两个元素具有相同的 ID,这就是 无效标记 .


    根据您的评论:

    $(function(){
        var selectYear = $("#dates").find("a.selected").attr("id") || "No id found.";
        alert(selectYear);
    });
    

    Fiddle with "No id found."

    Fiddle with "Id found."

    【讨论】:

    • 这行得通,除了我已经通过点击函数将 .selected 类动态添加到我的链接中,所以这段代码也需要在点击函数中。我不想不需要点击来查看是否添加了所选的类。有没有办法可以在点击功能之外扫描 .selected 类。
    • @lottebijl 是的,如果你把它放在点击之外并准备好文档,那会让你明白。我已经添加了更多代码和工作小提琴。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多