jQuery를 사용하여 요소의 ID를 어떻게 얻을 수 있습니까?


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

위의 방법이 작동하지 않는 이유는 무엇이며 어떻게해야합니까?


5
ID를 통해 선택된 요소의 ID를 얻는가? oO
— Martin Schneider

샘플 코드 "this"를 사용하는 이벤트 트리거를 작업 중이며 이벤트를 트리거 한 항목을 알고 각 요소가 트리거 된 횟수를 독립적으로 추적해야합니다. "this"로 샘플을 빌드하는 것은 너무 큽니다.
— 넬슨

답변:


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와 선택과 결과의 () 배열을 반환 기본 기능으로 하나의 요소를하지

jquery에서 DOM 선택기의 대안은 다음과 같습니다.

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

다른 어떤 .attr()및 $('#test').prop('foo')지정된 DOM을 잡고 foo있는 동안, 재산을 $('#test').attr('foo')횡령 지정된 HTML의 foo이 차이점에 대한 자세한 내용은 찾을 수 있습니다 속성과 여기를 .


234
jQuery에 이와 같은 단축키가 없을 때마다 놀랍습니다 $('#test').id().
— awe

5
id는 일반적으로 HTML과 JS에 하드 코딩되어 있기 때문에 거의 유용하지 않습니다. JS를 작성할 때 이미 일부 요소의 ID를 알고 있으므로 해당 ID를 작성하여 요소를 검색합니다. 프로그래밍 방식으로 요소의 ID를 얻을 필요는 거의 없습니다.
— daniel1426

10
164969 번하세요. 게다가 지금 여기 있습니다. 양식을 초기화하는 코드가 있습니다. 일부 양식에는 특별한 요구 사항이 있습니다. 내가 할 수 무엇을 결정하는 특정 양식 요소를 찾아,하지만 난 형태를 식별 생각 - 따라서 양식의 ID가 - 가장 논리적이고 확실한 방법입니다.
— 슬래시 백

50
요소의 ID를 가져와야하는 이유는 무엇입니까? 요소 클래스에 이벤트 핸들러가 연결되어 있고 이벤트를 트리거 한 특정 요소를 알아야합니다. 내가 잘하고 있기를 바랍니다.
— Buttle Butkus

4
Opps .. 확인 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
BTW, 나는 retval.push($(this).attr('id'))쓸 수 있다고 생각 합니다retval.push(this.id)
— 대런 쿡

HMTL5 data-** 속성이 필요한 경우 다음과 같이 사용하십시오. return $('.selector').map(function(i, dom){ return $(dom).attr('data-id'); })
— 취소

.selector 속성은 jQuery 1.7에서 더 이상 사용되지 않으며 jQuery Migrate 플러그인에서 .live ()를 지원하는 데 필요한 정도로만 유지됩니다. 이후의 순회 메소드가 세트를 변경했을 가능성이 있기 때문에,이 프로퍼티는 속성이었던 jQuery 세트에 현재 포함되어있는 요소 세트를 얻는 데 사용할 수있는 셀렉터의 신뢰할 수있는 표시기는 결코 아닙니다.
— Andrew Day

40

idhtml의 속성입니다 Element. $("#something")그러나을 쓸 때 일치하는 DOM 요소를 래핑하는 jQuery 객체를 반환합니다. 첫 번째 일치하는 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()새로운 방법 이라고 가정합니다 .
— Erik Philips

3
@ErikPhilips 나는 낡은 방식과 새로운 방식보다는 페이지를로드 할 때 원본 출력에 관심이 있는지 ( attr) 스크립트로 잠재적으로 수정 했는지 () 여부에 달려 있습니다 prop. 실제로 수정되지 않은 경우 id클라이언트 측 스크립트를 사용하여 모든 요소의 속성을 다음 prop과 attr동일하다.
— AntonChanning

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

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

물론 일부 검사 코드가 필요하지만 쉽게 구현됩니다!


9

.id유효한 jquery 함수가 아닙니다. .attr()요소가 소유 한 속성에 액세스 하려면 함수 를 사용해야합니다 . .attr()두 개의 매개 변수를 지정하여 속성 값을 변경하거나 하나를 지정하여 값을 얻는 데 사용할 수 있습니다 .

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


7

특정 요소에 대해 이벤트 (이 경우 click 이벤트)가 시작되면 클래스 선택기로 요소의 ID를 가져 오려면 다음을 수행하십시오.

 $('.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 라이브러리 다음에로드되는 도우미 파일에 넣었다.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); }
});

흥미롭게도 elementDOM 요소라면 다음과 같습니다.

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


0

element id, class 또는 짝수를 사용하여 자동으로 가능

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

-1

중요 : jQuery를 사용하여 새 객체를 만들고 이벤트를 바인딩하는 경우 다음 과 같이 attr 이 아닌 prop 을 사용해야 합니다 .

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


-1

이렇게하면 마침내 문제가 해결됩니다.

페이지에 많은 버튼이 있고 ID에 따라 jQuery Ajax (또는 ajax 아님)로 버튼 중 하나를 변경하려고한다고 가정 해 보겠습니다.

또한 양식, 승인 및 유사한 목적을 위해 다양한 유형의 버튼이 있으며 jQuery가 "like"버튼 만 처리하기를 원한다고 말할 수 있습니다.

다음은 작동하는 코드입니다. jQuery는 .cls-hlpb 클래스의 버튼 만 처리하고 클릭 한 버튼의 ID를 가져 와서 아약스에서 가져온 데이터에 따라 변경합니다.

<!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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.