javascript
  • jquery
  • 2011-09-02 2 views 19 likes 
    19

    당신이 요소에 "데이터 -"속성을 넣어 경우jQuery를 낙타의 경우 매핑 ".DATA()"키

    <div id='x' data-key='value'> 
    

    그런 다음이 값을 통해 얻을 수 있습니다 JQuery와 ".DATA()"방법

    alert($('#x').data('key')); // alerts "value" 
    

    라이브러리는 임베디드 대시 속성 이름에 대한 일관된 낙 케이스 변환기를 사용

    <div id='x' data-hello-world="hi"> 
    
    alert($('#x').data("helloWorld")); 
    

    낙타 - 케이스 컨버터는 jQuery를 "글로벌"기능입니다 :

    alert($.camelCase("hello-world")); // alerts "helloWorld" 
    

    그러나이 모든 나누기 아래 속성 이름이 대시로 둘러싸인 하나의 문자로 이름이 때 약간 이상한

    <div id='x' data-image-x-offset='50px'> 
    
    alert($('#x').data('imageXOffset')); // undefined 
    

    , 이유 :

    alert($.camelCase('image-x-offset')); // "imageXOffset" 
    

    왜 그래? 나는 그것이 다른 방향으로가는 데 사용 된 메커니즘과 관련이 있다고 생각합니다. 이미 낙타의 경우 이름을 다시 파선 형태로 변환합니다. 그러나 나는 코드에서 그것을 정확하게 지적 할 수 없다.

    1.6.3과 1.6.2에서 같은 것으로 보입니다. (양식 "이미지 x 오프셋"는 방식으로 데이터를 가져올 수 있습니다.)

    편집 — 주어진 요소에 대해, 당신은 낙타를 시도 전에 점선 형태 를 통해 액세스하는 경우 케이스 형태라면 작동합니다. (이것은 정확히 bug :-)입니다.

    +1

    jQuery 버그 신고 여기 : http://bugs.jquery.com/ticket/10194 (제출 한 @Pointy) –

    +0

    jsFiddle for you : http://jsfiddle.net/hJDLY/1/. 깔끔하게, OP가 그 버그 신고를 한 것처럼 보입니다!:-P – numbers1311407

    +0

    모두에게 감사드립니다! 내 아침에 먹은 :/ – Pointy

    답변

    14

    맞습니다. 문제는 그들이 camelCase에서 파선으로 변환 할 때 사용하는 정규 표현식과 같습니다.

    rmultiDash = /([a-z])([A-Z])/g; 
    

    ... as used here :

    var name = "data-" + key.replace(rmultiDash, "$1-$2").toLowerCase(); 
    

    ... 결과 : 대신 ...

    data-image-xoffset 
    

    :

    data-image-x-offset 
    

    데모 :

    따라서 대시 버전을 사용하면 속성을 찾을 때 변환 할 필요없이 찾아서 jQuery.cache의 요소 데이터에 camelCase 버전을 추가합니다.

    이제 올바른 camelCase가 있으므로 더 이상 특성으로 가져 오려고 시도하지 않으므로 더 이상 잘못된 정규식이 필요하지 않습니다.

    +1

    내가 이전에 그것을 보았을 때 나는 그것을 쳐다 보았다. 그러나 durrr이하는 일을 정확히 이해하려고 시도했을 때 나는 놀랐다 - 감사합니다! – Pointy

    관련 문제