Jquery는 $ jquery.data ()가있는 모든 요소를 ​​선택합니다.


답변:


98

당신은 할 수 있습니다

$('[data-myAttr!=""]'); 

이것은 data-myAttr''와 같지 않은 속성을 가진 모든 요소를 ​​선택합니다 (따라서 설정되어야합니다).

filter () 사용할 수도 있습니다.

$('*').filter(function() {
    return $(this).data('myAttr') !== undefined;
});

68
또는 그냥 :$('[data-myAttr]')
andlrc

4
같은 생각을했습니다. 예상대로 작동하지 않습니다. 데모를 참조하십시오
gdoron은 Monica를 지원

닫는는 '코드의 첫 부분에 없습니다 (직접 대답을 편집 할 수 없습니다)
Florent2

1
$ ( '[data-myAttr! = ""]'); 할당되지 않은 요소를 반환합니다. @NULL의 주석은 설정된 요소 만 가져옵니다.
arleslie 2014 년

6
잘못된! 올바른 솔루션 : $ ( '[data-myAttr]')-설명은 아래 답변 참조
BassMHL

75

선택하는 가장 쉽고 간단한 방법은 다음과 같습니다.

$('[data-myAttr]')

추가 정보:

많은 것을 테스트했습니다.

$('[data-myAttr!=""]')모든 경우에 사용 이 작동하는 것은 아닙니다. 없는 요소 때문에 data-myAttr세트는, 자신의 것 data-myAttr같를 undefined하고 $('[data-myAttr!=""]')잘못이다,뿐만 아니라 사람들을 선택합니다.


4
이것은 마크 업에 정의 된 데이터 속성에서만 작동합니다. jQuery를 통해 정의 된 데이터 속성으로는 작동하지 않습니다. jsfiddle.net/2p7h0Lj8/1
Sophivorus

19

filter () 사용할 수 있습니다 .

var elements = $("*").filter(function() {
    return $(this).data("myAttr") !== undefined;
});

1
이 게시물에 대한 되었습니까, 여기를 보여주는 바이올린 작품입니다 : jsfiddle.net/gbHFZ/1
로리 McCrossan

1
속성 선택기가 작업을 수행하지 않는 이유는 무엇입니까? $('[data-myAttr]')?
gdoron은 Monica를 지원

6
@gdoron, 이는의 data()getter 형식이 실제로 HTML5 data-속성을 읽지 만 setter 형식이 속성을 생성하거나 업데이트하지 않기 때문입니다.
Frédéric Hamidi 2012

음, 데이터를 어디에 저장합니까? 내 참조를 줄 수 있습니까? "(모든 데이터 값은 jQuery에 내부적으로 저장 됨)"을 읽었습니다 . 하지만 어디 ???
gdoron 모니카 지원하고

3
@gdoron, 데이터는 expando 속성을 통해 요소와 연결된 ID로 키가 지정된 전역 캐시에 유지됩니다.
Frédéric Hamidi 2012


8

: data () 선택기 와 함께 JQuery UI를 사용할 수 있습니다 .

지정된 키 아래에 저장된 데이터가있는 요소를 선택합니다.

이 jsfiddle 에서 예제를 확인하십시오.

일치하는 모든 요소를 ​​얻으려면 .data('myAttr')다음을 사용할 수 있습니다.

var matches = $(':data(myAttr)');

이 모두 요소에 대한 작업을해야 data-사용하여 저장된 데이터와 속성과 요소 $.data()때문에

jQuery 1.4.3부터 HTML 5 데이터 속성은 자동으로 jQuery의 데이터 객체로 가져옵니다.

그러나 이것은 잘 작동하지 않습니다. 이 jsfiddle을 확인 하면 두 번째로 선택기가 호출 될 때 두 요소와 일치해야하며 하나만 일치해야합니다. 이것은 jquery-ui 라이브러리의 "버그"때문입니다.

이것은 핵심 jquery-ui 파일에서 가져옵니다.

 $.extend( $.expr[ ":" ], {
    data: $.expr.createPseudo ?
        $.expr.createPseudo(function( dataName ) {
            return function( elem ) {
                return !!$.data( elem, dataName );
            };
        }) :
        // support: jQuery <1.8
        function( elem, i, match ) {
            return !!$.data( elem, match[ 3 ] );
        }
});

보시다시피 속성이있는 요소를 요청하는 경우 캐시가 업데이트되지 않도록 $.data(elem, match)대신 사용 $(elem).data(match)하고 있습니다 data-. 요소가 테스트 된 경우data() 저장 경우 이것은 잘 작동하지만 그렇지 않은 경우 결과 일치에 포함되지 않습니다.

원하는 것이 사용자가 설정 한 데이터 정보가있는 요소 만 일치시키는 것이지만 그렇지 않은 경우 두 가지 옵션이 남아있는 경우 이것은 전혀 버그가 아닐 수 있습니다.

  1. jquery-ui를 사용하지 말고 자신의 의사 선택기를 확장하십시오. $(:mydata(myAttr))

    $.extend($.expr[":"], {
       mydata: $.expr.createPseudo ?
       $.expr.createPseudo(function(dataName) {
          return function(elem) {
             return !!$(elem).data(dataName);
          };
       }) : function(elem, i, match) {
           return !!$(elem).data(match[3]);
       }
    });

  2. :data의사 선택기와 함께 jquery-ui를 사용하고 [data-myAttr]건너 뛸 수있는 항목을 포함하도록 선택 결과를 결합합니다.

    var matches = $(':data(myAttr)', '[data-myAttr]')


이것은 실제 ID 또는 데이터 속성 이름을 몰라도 data- * 속성이있는 요소를 선택하는 문제에 대한 해결책의 일부였습니다. 다른 곳에서 jQuery를 확장하는 방법을 찾았지만 코드 스 니펫은 실제 적용을 보여주기 위해 여기에 +1했습니다. 다른 사람들은 힌트를 줄만큼 충분히 제공하지만 때로는 제공된 정보를 사용하는 방법을 보여 주어야합니다. 감사! :)
Brandon Elliott

7
$('[data-myAttr]').each(function() {
       var element = $(this);
       // Do something with the element
});

2

이전에 설정 한 요소 선택 jquery.data();


문제는 데이터가 아닌 특정 키를 가진 모든 요소를 ​​찾는 것입니다.


활용 해보세요 jQuery.data()

$(".myClass").each(function(i){
    if( i % 2 == 0 ){
        $(this).data("myAttr",i + 1);                
    }
});
    
var res = $(".myClass").map(function(i) {
    console.log($(this).data("myAttr"));
    return $.data(this, "myAttr") !== undefined ? this : null
});    

console.log(res);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div class="myClass">1</div>
<div class="myClass">2</div>
<div class="myClass">3</div>
<div class="myClass">4</div>
<div class="myClass">5</div>

jsfiddle http://jsfiddle.net/xynZA/142/


답변 해 주셔서 감사합니다. 질문은 데이터가 아닌 특정 키를 가진 모든 요소를 ​​찾는 것입니다.
Argiropoulos Stavros 2015

@ArgiropoulosStavros html data-*속성이 설정된 요소 뿐만 아니라 설정된 요소를 반환해야 jQuery.data()합니까?
guest271314 2015
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.