如何使用jQuery获取元素的ID?

fea*_*net 1320 jquery jquery-selectors

<div id="test"></div>
<script>
  $(document).ready(function() {
    alert($('#test').id);
  });  
</script>
Run Code Online (Sandbox Code Playgroud)

为什么上述工作没有,我该怎么办呢?

ins*_* me 2177

jQuery方式:

$('#test').attr('id')
Run Code Online (Sandbox Code Playgroud)

在你的例子中:

$(document).ready(function() {
  console.log($('#test').attr('id'));
});
Run Code Online (Sandbox Code Playgroud)

或者通过DOM:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="test"></div>
Run Code Online (Sandbox Code Playgroud)

甚至 :

$('#test').get(0).id;
Run Code Online (Sandbox Code Playgroud)

$('#test').get(0)JQuery中使用的原因甚至$('#test')[0]$('#test')JQuery选择器并返回结果的数组()而不是单个元素的默认功能

jquery中DOM选择器的替代方法是

$('#test')[0].id;
Run Code Online (Sandbox Code Playgroud)

.attr()$('#test').prop('foo')抓取指定的DOM foo属性不同,并且抓取指定的DOM 属性,同时$('#test').attr('foo')抓取指定的HTML foo属性,您可以在此处找到有关差异的更多详细信息.

  • 每次jQuery没有像`$('#test').id()`这样的快捷方式时,我都会感到惊讶. (230认同)
  • 为什么我需要获取元素的ID?因为我有一个事件处理程序附加到一个元素类,我需要知道哪个特定元素触发了事件.我希望我做得对. (47认同)
  • 做164969次.再加上我现在在这里.我有初始化表单的代码.一些表格有特殊要求.我_could_寻找特定的表单元素来决定做什么,但我认为识别表单 - 因此表单的id - 是最合乎逻辑和最可靠的方式. (10认同)
  • 它很少有用,因为id通常硬编码到HTML和JS中.当你编写JS时,你已经知道某个元素的ID,所以你编写该ID来检索元素.您很少需要以编程方式获取元素的ID. (5认同)
  • Opps ..赚1,122,603次..:P (4认同)
  • @daniel1426 例如,我需要它,因为我从 json 数据动态创建嵌套 div 的结构。如果您可以构建诸如 $('.div-structure').on('click', function(){ doStuffWith(**$(this).attr('id')**); 之类的东西,那将非常有用。 }); (2认同)

Ste*_*ven 82

$('selector').attr('id')将返回第一个匹配元素的id.参考.

如果匹配集包含多个元素,则可以使用传统.each 迭代器返回包含每个id的数组:

var retval = []
$('selector').each(function(){
  retval.push($(this).attr('id'))
})
return retval
Run Code Online (Sandbox Code Playgroud)

或者,如果您愿意使用一点点砂砾,您可以避免使用包装并使用.map 快捷方式.

return $('.selector').map(function(index,dom){return dom.id})
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,我觉得`retval.push($(this).attr('id'))`可以写成`retval.push(this.id)` (8认同)

Anu*_*rag 39

id是HTML的属性Element.但是,在编写时$("#something"),它会返回一个包装匹配DOM元素的jQuery对象.要返回第一个匹配的DOM元素,请调用get(0)

$("#test").get(0)
Run Code Online (Sandbox Code Playgroud)

在此本机元素上,您可以调用id或任何其他本机DOM属性或函数.

$("#test").get(0).id
Run Code Online (Sandbox Code Playgroud)

这就是为什么id你的代码没有工作的原因.

或者,使用jQuery的attr方法,因为其他答案建议获取id第一个匹配元素的属性.

$("#test").attr("id")
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 24

以上答案很棒,但随着jquery的发展......所以你也可以这样做:

var myId = $("#test").prop("id");
Run Code Online (Sandbox Code Playgroud)

  • @ErikPhilips 我相信,而不是旧方式和新方式,这取决于您是否对页面加载时的原始输出(`attr`)或可能被脚本修改的原始输出(`prop`)感兴趣。如果您实际上没有使用客户端脚本修改任何元素的 `id` 属性,那么 `prop` 和 `attr` 是相同的。 (6认同)
  • @cjbarth`attr()`在1.0中添加了,并且在1.6中添加了`prop()`,所以我假设你的评论是`prop()`是新方法. (4认同)

小智 22

$.fn.extend({
    id : function() {
        return this.attr('id');
    }
});

alert( $('#element').id() );
Run Code Online (Sandbox Code Playgroud)

当然需要一些检查代码,但很容易实现!

  • 你去那里,因为那些抱怨jQuery没有.id()方法的人! (7认同)

Joe*_* C. 9

.id不是有效的jquery函数.您需要使用该.attr()函数来访问元素拥有的属性.您可以.attr()通过指定两个参数来更改属性值,也可以通过指定一个来获取值.

http://api.jquery.com/attr/


小智 7

如果你想得到一个元素的ID,让我们说一个类选择器,当一个事件(在这种情况下是click事件)被触发该特定元素时,那么下面将完成这个工作:

 $('.your-selector').click(function(){
       var id = $(this).attr('id');
 });
Run Code Online (Sandbox Code Playgroud)


Uma*_*nif 7

    $("#button").click(function() {
      var clickID = $("#testDiv").attr("id");
      console.log(clickID)
    });
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="testDiv"> When button will click you'll get this id value </div>
<button id="button"> Button </button>
Run Code Online (Sandbox Code Playgroud)


小智 6

$('#test').attr('id') 在你的例子中:

<div id="test"></div>

$(document).ready(function() {
    alert($('#test').attr('id'));
}); 
Run Code Online (Sandbox Code Playgroud)


Gol*_*hop 5

好吧,似乎还没有解决方案,并且想提出我自己的解决方案,这是JQuery原型的扩展.我把它放在一个在JQuery库之后加载的Helper文件中,因此检查window.jQuery

if (window.jQuery) {
    $.prototype.id = function () {
        if (this.length > 1) {
            var val = [];
            this.each(function (idx, el) {
                val.push($(el).id());
            });
            return val;
        } else {
            return this.attr('id');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它可能不完美,但它可能是包含在JQuery库中的开始.

返回单个字符串值或字符串值Array.字符串值Array用于事件,使用多元素选择器.