jQuery 일치하는 클래스에 주어진 ID가 있는지 확인


96

jQuery는 다음 문과 동일한 ID를 가지고 있습니까?

$('#mydiv').hasClass('foo')

클래스 이름을 제공하고 제공된 ID가 포함되어 있는지 확인할 수 있습니다.

같은 것 :

$('.mydiv').hasId('foo')

특정 div에 스타일을 적용하고 싶습니다. 예를 들어로드 시간에 foo 클래스가있는 모든 항목이 표시되지만 id가 bar 인 클래스 foo의 인스턴스 하나를 토글 할 수 있습니다.
Nicholas Murray

1
그런 다음 $('#bar.foo').toggle();문서에 고유해야하므로 하나의 ID 만 가질 수 있습니다. 클래스의 경우에만 해당 ID를 토글 foo하려면 클래스를 id 선택기에 추가하십시오. 선택기가 빈 세트를 찾으면 아무 일도 일어나지 않고 결과가있는 세트 (하나만있을 것임)를 찾으면 요소를 토글합니다. 나는 당신이 이것을 지나치게 생각하는 것 같습니다.
prodigitalson 2010

3
사람들이 "왜 그렇게하고 싶을까요?"라고 말하는 것이 답답하다고 말하는 것뿐입니다. 지금이 일을하려고 할 때. hasClass의 문제는 선택자와 일치하는 요소에 주어진 클래스가 있으면 True를 반환한다는 것입니다. 그래서 "cake"클래스와 각각에 대한 추가 클래스 이름 ( "one", "two"등)을 가진 많은 p가있는 곳에 문제가 있습니다. 일반적인 p.cake 세트를 선택하고 조건부 (if class = "one"-$ var = 23-etc)를 갖고 싶습니다. 요점은 추가 클래스 이름에 따라 다른 $ var를 전달하려고한다는 것입니다. 나는 전체 비트 o를 반복하지 않으려 고 노력하고 있습니다
Stella

답변:


171

여러 선택기결합 하여 해당 논리를 선택기에 적용 할 수 있습니다 . 예를 들어, 특정 클래스가있는 지정된 ID를 가진 모든 요소를 ​​대상으로 지정할 수 있습니다.

$("#foo.bar"); // Matches <div id="foo" class="bar">

이것은 CSS로 작성한 것과 비슷하게 보일 것입니다. 모든 #foo요소에 적용되지는 않으며 (하나만 있어야하지만) 모든 .bar요소에 적용되지는 않습니다 (여러 개가있을 수 있음). 두 속성 모두에 한정된 요소 만 참조합니다.

jQuery 에는 요소에 특정 특성이 있는지 확인할 수 있는 훌륭한 .is방법 도 있습니다. 문자열 선택기, HTML 요소 또는 다른 jQuery 객체에 대해 jQuery 컬렉션을 테스트 할 수 있습니다. 이 경우 문자열 선택기와 비교하여 확인합니다.

$(".bar:first").is("#foo"); // TRUE if first '.bar' in document is also '#foo'

32
에 대한 +1 is(). 이 있어야 .hasId()그것의에 대한 확실한 파트너처럼 보인다해서 선택 .hasClass()... 정말
마 플레처

43

아마 사용하는 것이 $('.mydiv').is('#foo');당신이 ID를 알고 있다면 왜 wouldnt가 방금 처음에 선택에 적용 즉했다?


17
코드가 특정 경우를 다르게 처리해야하는 콜백 함수로 들어갈 수 있습니다. 따라서 함수는 알 수없는 속성을 가진 jQuery 객체에 자동으로 전달됩니다. 이 경우 $ ( 'your answer'). is ( 'helpful');
Peter G

1
여러 가지 이유를 생각할 수 있습니다. 요소에 id = "mobile"이있는 경우와 같이 모바일 전용 설정을 적용하려면 어떻게해야합니까? 그 이유는 중요하지 않습니다.
배치 가능

글쎄요, 하나의 요소 만이 id다른 속성이어야합니다 ... 문제의 요소의 구조적 위치가 페이지 또는 클라이언트 / 사용자 에이전트를 기반으로 변경되면 괜찮습니다. .
prodigitalson 2015-06-29

19

업데이트 : 질문을 오해하여 죄송합니다 .has(). 답변이 삭제되었습니다 .

또 다른 방법은 .hasId()플러그인 생성

// the plugin
$.fn.hasId = function(id) {
  return this.attr('id') == id;
};

// select first class
$('.mydiv').hasId('foo') ?
  console.log('yes') : console.log('no');

// select second class
// $('.mydiv').eq(1).hasId('foo')
// or
$('.mydiv:eq(1)').hasId('foo') ?
  console.log('yes') : console.log('no');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="mydiv" id="foo"></div>
<div class="mydiv"></div>


5
미안하지만 질문을 잘못 해석했다고 생각합니다. has () API 는 다음과 같이보고합니다. 일치하는 요소 집합을 선택자 또는 DOM 요소와 일치 하는 하위 항목 이있는 요소로 줄입니다. OP는 클래스가 'myDiv'인 요소에 Id foo도 있는지 테스트하는 방법을 묻고 있으며 has ()는 ID가 'foo'인 'myDiv'의 자손을 찾습니다.
틸트

7

일부 DOM 객체를 반복하고 특정 ID를 가진 요소를 찾고 포착하려고한다고 가정 해 보겠습니다.

<div id="myDiv">
    <div id="fo"><div>
    <div id="bar"><div>
</div>

찾을 수 있습니다.

$('#myDiv').find('#bar')

클래스 선택기를 사용하는 경우 find 메서드는 일치하는 모든 요소를 ​​반환합니다.

또는 더 고급 작업을 수행 할 반복 함수를 작성할 수 있습니다.

<div id="myDiv">
    <div id="fo"><div>
    <div id="bar"><div>
    <div id="fo1"><div>
    <div id="bar1"><div>
    <div id="fo2"><div>
    <div id="bar2"><div>
</div>

$('#myDiv div').each(function() {
   if($(this).attr('id') == 'bar1')
       //do something with bar1
});

클래스 선택자에 대해 동일한 코드를 쉽게 수정할 수 있습니다.

<div id="myDiv">
    <div class="fo"><div>
    <div class="bar"><div>
    <div class="fo"><div>
    <div class="bar"><div>
    <div class="fo"><div>
    <div class="bar"><div>
</div>

$('#myDiv div').each(function() {
   if($(this).hasClass('bar'))
       //do something with bar
});

index ()로 문제를 해결 해주셔서 기쁩니다. 건배 :)


4
$('#' + theMysteryId + '.someClass').each(function() { /* do stuff */ });

둘 이상이 없을 것이기 때문에 각각은 필요하지 않습니다 #theMysteryId.
prodigitalson 2010

2
변수에 할당하고 길이가 비어 있지 않은지 확인한 다음 코드를 진행하는 수고를 덜어줍니다. 선택기가 일치하지 않는 경우 jQuery는 "각"함수를 호출하지 않으므로 멋지고 깔끔합니다. 이제 원하는 것이 jQuery API를 호출하는 것뿐이라면 확실합니다.
Pointy

4

결국 index ()를 사용하여 이것을 해결했다고 말하십시오.

다른 것은 작동하지 않는 것 같았습니다.

따라서 형제 요소의 경우 먼저 공통 클래스로 선택한 다음 각 특정 클래스에 대해 다르게 수정하려는 경우 좋은 해결 방법입니다.

편집 : (나와 같은) 모르는 사람들을 위해 index ()는 DOM에서의 순서에 따라 0부터 계산하여 선택자와 일치하는 각 요소에 대한 색인 값을 제공합니다. class = "foo"에 얼마나 많은 요소가 있는지 아는 한 ID가 필요하지 않습니다.

분명히 이것이 항상 도움이되는 것은 아니지만 누군가가 유용하다고 생각할 수 있습니다.



1

다음과 같이 id 요소가 사용되는지 확인할 수도 있습니다.

if(typeof $(.div).attr('id') == undefined){
   //element has no id
} else {
   //element has id selector
}

전역 dataTables 및 특정 순서가 지정된 dataTables에이 방법을 사용합니다.


정의되지 않은 지금과 같은 작업을 위해 따옴표로해야한다 '정의되지 않은'
레오
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.