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


1390
<div id="test"></div>
<script>
  $(document).ready(function() {
    alert($('#test').id);
  });  
</script>

为什么上述方法不起作用,我应该怎么做?


5
获取通过其ID选择的元素的ID?oO
Martin Schneider

样例代码。我正在使用“ this”的事件触发器上工作,我需要知道是什么触发了事件,并独立跟踪每个元素被触发了多少次。使用“ this”构建样本将太大。
尼尔森

Answers:


2303

jQuery方式:

$('#test').attr('id')

在您的示例中:

$(document).ready(function() {
  console.log($('#test').attr('id'));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="test"></div>

或通过DOM:

$('#test').get(0).id;

甚至 :

$('#test')[0].id;

$('#test').get(0)在JQuery中甚至使用的背后原因甚至$('#test')[0]是它$('#test')是一个JQuery选择器,并通过其默认功能返回结果的array()而不是单个元素

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

$('#test').prop('id')

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


234
每当jQuery没有这样的快捷方式时,我都会感到惊讶$('#test').id()
敬畏

5
因为id通常硬编码到HTML和JS中,所以它很少有用。在编写JS时,您已经知道某个元素的ID,因此您编写该ID即可检索该元素。您很少需要以编程方式获取元素的ID。
daniel1426 2014年

10
使该164969次。再加上现在我在这里。我有初始化表格的代码。其中一些表格有特殊要求。我可以寻找特定的表单元素来决定要执行的操作,但是我认为识别表单(即表单的ID)是最合乎逻辑的方式。
Slashback 2014年

50
为什么我需要获取元素的ID?因为我将事件处理程序附加到一类元素上,所以我需要知道哪个特定元素触发了该事件。我希望我做对了。
Buttle Butkus 2015年

4
运..使1,122,603次..:P
BvuRVKyUVlViVIc7

85

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

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

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

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

return $('.selector').map(function(index,dom){return dom.id})

9
顺便说一句,我认为retval.push($(this).attr('id'))可以写retval.push(this.id)
Darren Cook

如果您需要HMTL5 data-**的属性,则使用类似以下的方法:return $('.selector').map(function(i, dom){ return $(dom).attr('data-id'); })
撤销

.selector属性在jQuery 1.7中已弃用,仅在jQuery Migrate插件中支持.live()所需的范围内维护。该属性从来都不是选择器的可靠指示符,因为可以使用该选择器来获取当前包含在jQuery集合中作为属性的元素集,因为随后的遍历方法可能会更改该集合。
安德鲁·戴

40

id是html的属性Element。但是,当您编写时$("#something"),它将返回一个jQuery对象,该对象包装了匹配的DOM元素。要获取第一个匹配的DOM元素,请调用get(0)

$("#test").get(0)

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

$("#test").get(0).id

这就是为什么id在您的代码中不起作用的原因。

或者,使用jQuery的attr方法作为其他答案,以获取id第一个匹配元素的属性。

$("#test").attr("id")

25

上面的答案很好,但是随着jquery的发展..您也可以这样做:

var myId = $("#test").prop("id");

4
@cjbarth attr()是在1.0 prop()中添加的,在1.6中是添加的,所以我假设您的评论prop()是新方法。
埃里克·飞利浦

3
我相信@ErikPhilips,而不是旧方法和新方法,它取决于您是否对页面加载时的原始输出感兴趣(attr)或可能由脚本修改的(prop)。如果您实际上id没有使用客户端脚本修改任何元素的属性,则propattr相同。
AntonChanning

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

alert( $('#element').id() );

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


9

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

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


7

如果要获取某个元素的ID,则由类选择器说,当在该特定元素上触发一个事件(在本例中为click事件)时,将执行以下操作:

 $('.your-selector').click(function(){
       var id = $(this).attr('id');
 });

6

$('#test').attr('id') 在您的示例中:

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

$(document).ready(function() {
    alert($('#test').attr('id'));
}); 

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');
        }
    }
}

它可能并不完美,但是它可能成为包含在JQuery库中的开始。

返回单个字符串值或字符串值数组。字符串值数组是用于使用多元素选择器的事件。


4

$('#test')返回一个jQuery对象,因此您不能简单object.id地使用它来获取它Id

您需要使用$('#test').attr('id'),它返回您需要ID的元素

也可以按照以下步骤进行操作:

$('#test').get(0).id 等于 document.getElementById('test').id


1
..并且$('#test')[0].id.get(0)
Gabriele Petrioli

3

可能对其他发现此线程的人有用。以下代码仅在您已经使用jQuery的情况下有效。该函数始终返回一个标识符。如果元素没有标识符,则函数会生成标识符并将其附加到元素。

var generatedIdCounter = 0;

$.fn.id = function() {
    var identifier = this.attr('id');

    if(!identifier) {
        generatedIdCounter++;
        identifier = 'isGenerated_' + generatedIdCounter;

        this.attr('id', identifier);
    }

    return identifier;
}

如何使用:

$('.classname').id();

$('#elementId').id();

2
$('tagname').attr('id');

使用上面的代码,您可以获得ID。


2

这是一个古老的问题,但是从2015年开始可能会有效:

$('#test').id;

您还可以进行分配:

$('#test').id = "abc";

只要定义以下JQuery插件:

Object.defineProperty($.fn, 'id', {
    get: function () { return this.attr("id"); },
    set: function (newValue) { this.attr("id", newValue); }
});

有趣的是,如果element是DOM元素,则:

element.id === $(element).id; // Is true!


0

这可以是元素id,class,也可以自动使用甚至

------------------------
$(this).attr('id');
=========================
------------------------
$("a.remove[data-id='2']").attr('id');
=========================
------------------------
$("#abc1'").attr('id');
=========================

-1

重要提示:如果要使用jQuery创建新对象并绑定事件,则必须使用prop而不是attr,如下所示:

$("<div/>",{ id: "yourId", class: "yourClass", html: "<span></span>" }).on("click", function(e) { alert($(this).prop("id")); }).appendTo("#something");


-1

这最终将解决您的问题:

假设您在页面上有许多按钮,并且您想根据其ID使用jQuery Ajax(或不使用ajax)更改其中一个按钮。

还可以说您有许多不同类型的按钮(用于表单,用于批准和用于类似目的),并且您希望jQuery只处理“喜欢”按钮。

这是一个有效的代码:jQuery将仅处理.cls-hlpb类的按钮,它将获取被单击的按钮的ID,并将根据来自Ajax的数据对其进行更改。

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js">    </script>
<script>
$(document).ready(function(){
$(".clshlpbtn").on('click',function(e){
var id = $(e.target).attr('id');
 alert("The id of the button that was clicked: "+id);
$.post("demo_test_post.asp",
    {
      name: "Donald Duck",
      city: "Duckburg"
    },
    function(data,status){

    //parsing the data should come here:
    //var obj = jQuery.parseJSON(data);
    //$("#"+id).val(obj.name);
    //etc.

    if (id=="btnhlp-1")
       $("#"+id).attr("style","color:red");
    $("#"+id).val(data);
    });
});




});
</script>
</head>
<body>

<input type="button" class="clshlpbtn" id="btnhlp-1" value="first btn">    </input>
<br />
<input type="button" class="clshlpbtn" id="btnhlp-2" value="second btn">    </input>
<br />
<input type="button" class="clshlpbtn" id="btnhlp-9" value="ninth btn">    </input>

</body>
</html>

代码取自w3schools,并已更改。


-1
<html>
<head>
  <link rel="stylesheet"href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    </head>
<?php
    // include Database connection file 
    include("db_connection.php");

    // Design initial table header 
    $data = '<table class="table table-bordered table-striped">
                        <tr>
                            <th>No.</th>
                            <th>First Name</th>
                            <th>Last Name</th>
                            <th>Email Address</th>
                            <th>Update</th>
                            <th>Delete</th>
                        </tr>';
    $query = "SELECT * FROM users";
    if (!$result = mysqli_query($con, $query)) {
        exit(mysqli_error($con));
    }
    // if query results contains rows then featch those rows 
    if(mysqli_num_rows($result) > 0)
    {
        $number = 1;
        while($row = mysqli_fetch_assoc($result))
        {
            $data .= '<tr>
                <td>'.$number.'</td>
                <td>'.$row['first_name'].'</td>
                <td>'.$row['last_name'].'</td>
                <td>'.$row['email'].'</td>
                    <td><button onclick="DeleteUser('.$row['id'].')" class="btn btn-danger">Delete</button>
                </td>
            </tr>';
            $number++;
        }
    }

    else
    {
        // records now found 
        $data .= '<tr><td colspan="6">Records not found!</td></tr>';
    }

    $data .= '</table>';
    echo $data;
?>

<script type="text/javascript">

    function DeleteUser(id) {
    var conf = confirm("Are you sure, do you really want to delete User?");
    if (conf == true) {
        $.ajax({
                    url:'deleteUser.php',
                    method:'POST',
                    data:{
                        id:id
                    },
            success:function(data){
                      alert('delete successfully');
                   }




}
});

deleteUser.php

<?php
// check request
if(isset($_POST['id']) && isset($_POST['id']) != "")
{
    // include Database connection file
    include("db_connection.php");

    // get user id
    $user_id = $_POST['id'];

    // delete User
    $query = "DELETE FROM users WHERE id = '$user_id'";
    if (!$result = mysqli_query($con, $query)) {
        exit(mysqli_error($con));
    }
}
?>

-1

它不能回答OP,但可能会让其他人感兴趣:.id在这种情况下,您可以访问该字段:

$('#drop-insert').map((i, o) => o.id)

1
当他们向我解释我理解的错误时,我深表谢意。否则我会发现它们像蚊子一样有趣。
mariotomo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.