2013-03-20 1 views
16

배경 jQuery를 1.9 속성 값을 반환 더 이상 .attr(..) 방법으로jQuery를 1.9.1 속성 선택

대신 우리는 지금 .prop(..)을 사용해야합니다.

.prop() vs .attr()

내 상황 : 불행하게도 이것은 또한 http://jquery.com/upgrade-guide/1.9/#attr-versus-prop-

.attr.prop의 차이점에 대한 좋은 SO 설명을 참조하십시오 $("input[value=]")

즉 속성 선택을 통해 지정된 속성에 적용

현재 값이 설정되지 않은 입력 요소를 선택하려면 $("input[value=]")$("select[value=]") 과 같은 선택기를 사용하고 있습니다.

var hasValue = function() { return !!($(this).val().length); }; 
var hasNoValue = function() { return !($(this).val().length); }; 
$("input").filter(hasValue); 
$("select").filter(hasValue); 

내 실제 선택기

는, 조금 큰 또는 그래서 지금은 분할하는 데 값이없는 여러 요소를 확인 : 그러나,이 더 이상 대신 내가 지금 이런 일을하고있어, jQuery를 1.9로 작동합니다 내 선택기 문자열을 .ifilter (..) 메서드 호출로 여러 선택기에 넣습니다.

질문

$("[value=]"), $("[value!=]")에 해당하는이 있는가, 속성 대신 속성을 사용 $("[value='abc']")? 그렇다면 .filter(hasValue).filter(hasNoValue) 방법을 사용하는 것보다 더 깨끗한 방법이 있습니까?

감사 .filter 유일한 방법이 될 것 같다,하지만 너무 나쁘지 않다 당신이 실제로 .val를 사용하여 좀 더 정확하게 할 수 있습니다 사용

+0

나에게 매우 깨끗한 보이는 코드에이 이벤트 처리기를 추가 현재의 솔루션은 사용자 입력이 있었는지 여부를 고려합니다) – ahren

+0

'[value =]'대신'[value]'가되어야합니까? 아니면 둘 다 작동합니까? –

+0

나를 위해 잘 작동합니다 -> [** FIDDLE **] (http://jsfiddle.net/ssPku/),'[value = ""]''[value]'로 선택해야합니다. 값 속성을 가진 요소. – adeneo

답변

12

:

$(":input").filter(function() { return $(this).val() === ""; }); 

을이 정말 비난이다 경우 당신에게 커스텀 선택자를 생성 할 수 있습니다.

$.expr[':'].emptyInput = function (elem) { 
    return $(elem).is(":input") && $(elem).val() === ""; 
}; 

http://jsfiddle.net/ExplosionPIlls/zaZPp/

편집 : 당신은 또한 this.value를 사용하는 대신 $(elem).val() 멀리 얻을 수 있습니다.

+0

예, 사용자 정의 표현식은 내가 본 후에 수행 한 것입니다. 이것은 단지 기본 설정이지만'$ ("input : emptyInput")와 같은 단일 표현식은 다음 코더에 대해 이해하기 쉽습니다. 감사. – Walter

1

upgrade guide에있어서, 상기에 의해 등록하게

같은 선택기 "입력 [값 = ABC가]"을 사용하고, 항상 값 속성으로 선택해야하지만

아닌 변경 예를 들어 사용자가 텍스트 입력을 입력 할 수 있습니다. jQuery 1.9부터이 함수는 정확하고 일관되게 동작합니다. 이전 버전의 jQuery는 속성을 사용해야 할 때이 속성을 사용하기도했습니다.

이렇게하면 첫 번째 질문에 대한 답을 얻을 수 있습니다. 즉, 직접적인 의미는 없지만 속성 대신 특성을 사용하는 것이 중요합니다.

코드는 괜찮은 것처럼 보이지만 더 표준화되고 재사용하고 싶다면 추가 필터를 만들 수 있습니다. 그래서 같이 :

// Select input elements with value and select elements without value. 
$('input:hasValue,select:not(:hasValue)'); 

을 그리고 다른 여러 가지 조합이 필요합니다

(function($) { 
    $.expr[':'].hasValue = function(element) { 
     var $element = $(element); 
     return element.is(':input') && element.val(); 
    }; 
}(window.jQuery)); 

이것은 당신이 그런 식으로 물건을 선택할 수 있습니다.

+0

업그레이드 가이드에서 해당 단락을 읽었지 만 그 정확한 상황에 대한 대안을 제공하지 않아서 좌절감을 나타 냈습니다. 나는'$ ("input {value = abc}")와 같은 속성 구문을 기대했다. 그러나 내 자신의 표현을 정의하는 것만으로도 좋습니다. +1 후에 나는 같은 대답을했다. – Walter

0

나는이 문제에 직면 해 다른 제안 된 해결책이 적절하지 않은 일부 상황에서 작동하는 다른 해결책을 게시하려고했습니다. DOM을 초기화 한 경우에만 값 세트에서 일하게 될 것입니다, 이전 솔루션 (및 이전 솔루션보다 아마도 더 나은 -

단순히

$('input').on('keyup', function(){ 
     var value = $(this).val(); 
     $(this).attr('value', value); 
    });