2012-02-17 4 views
1

필자는이 질문에 대한 답변을 필사적으로 찾고 있었지만 아무것도 발견하지 못했습니다. 현재 사용자 정의 '속성에서 HTML5 데이터 -yyy 속성으로 전환하여 작성중인 웹 사이트의 코드를 개선하고 있습니다. 이제 내 문제를 heres.jQuery removeAttribute() not working

$("#test ul li").click(function(event){ 
     $(this).toggleClass("selected"); 
     if($(this).hasClass("selected")){ 
      if(jQuery.trim($("#input_value").val())){ 
       $(this).data("special",{"value":jQuery.trim($("#input_value").val())}); 
      } 
     } 
     else{ 
      $(this).removeAttr("data-special"); 
     } 
    }); 

다음 코드는 특정 li 요소를 클릭하면 시작됩니다. 클래스가 토글되고 토글 링 된 후 (즉 단어?) 스크립트는이 요소에 토글 된 클래스가 있는지 여부를 확인합니다. 클래스가 없으면 (문제가있는 곳) 스크립트는 데이터 "special"을 제거하여 데이터를 삭제해야합니다. 이것은 전혀 일어나지 않습니다!

기능 외부

$("#test ul li").removeAttr("data-special"); 

를 추가하는 경우, 그것은 모두 괜찮 예상대로 작동합니다. 어떤 아이디어?

답변

3

값을 .data()에 가져 왔으므로 .removeData()을 사용하십시오.

$(this).removeData("special"); 

속성 값을 .data()으로 가져 오면 해당 값으로 작업해야합니다. 특성을 제거해도 .data()은 제거되지 않습니다.

둘 다 제거해야하는 경우 두 가지 방법을 모두 호출하거나 단순히 .data()을 사용하지 않아야합니다.

+0

감사합니다. 재미 있은만큼, 이것이 내가 시작한 일이다. 코드가 작동하지 않는 것 같아서, 내가 답을 찾아봤을 때 http : //bugs.jquery를 발견했을 때 버그가 있었음에 틀림 없다. co.kr/ticket/10784를 작성했으며 데이터 yyy를 제거시 속성으로 취급하는 것으로 이해했습니다 (또는 오해). 한 가지 더 또는 처음에는 .data()를 사용하지 마십시오. .data()를 사용하지 않아야합니까? 너는 그걸 좋아하지 않니? –

+0

@ BenediktÓmarsson : 천만에요. '.data()'를 사용할 때, 복잡한 데이터를 저장해야 할 때 유용 할 수 있습니다. 예를 들어, 개체를 저장하는 것 같습니다. '{value : "특별한 값"}'실제로 속성이 추가되고 제거되는 객체가 필요하다면'.data()'가 유용 할 수 있습니다. 그러나 만약 당신이하고있는 모든 일이 그 하나의'data-'속성의 값을 읽는다면'.attr() '을 사용하는 것이 조금 빠르며'jQuery . 캐시 '. –

+0

나는 알고있다. 필자가 쓰고있는 응용 프로그램은 복잡한 측면에서 조금 (적어도 나를 위해, 사업에 새로운) 조금 있습니다. 저는 .attr() 사용자에게 익숙했으며 사용자 정의 속성 (

somevalue
과 같은)을 사용했습니다. 그러나 코드를 검증하는 데 w3c 도구를 사용하면 '존재하지 않기 때문에 항상 이러한 속성에 대해 불평합니다. 그 후 나는 사용자 정의 속성을 추가하는 것이 가능할지라도 더러운 거래라고 인상을 받았다. 이것은 사실이 아닌가? 도움과 의견을 미리 보내 주셔서 감사합니다. –

1

이 속성없는

$ (이) .DATA ("특별한", { "값". jQuery.trim ($ ("#의 input_value") 발())}) ;

사용자가 jquery 캐시에 저장하고 있습니다. 따라서이를 제거하려면 표시된 다른 포스터와 같이해야하며 removeData 함수를 사용하여 제거해야합니다.