웹 프론트엔드 JS 튜토리얼 JS의 attr 속성과 prop 속성의 차이점과 우선순위 선택 예시 소개_기본지식

JS의 attr 속성과 prop 속성의 차이점과 우선순위 선택 예시 소개_기본지식

May 16, 2016 pm 04:42 PM
prop

attr과 비교하면 prop은 1.6.1에서 새로 추가되었습니다. 둘 다 중국어 의미로 이해되며 둘 다 속성(속성 및 속성)을 가져오거나 설정하는 방법입니다. 하지만 jQuery 1.6 이전 버전에서는 윈도우나 문서에서 사용하는 .attr() 메소드가 윈도우나 문서에 속성이 없기 때문에 제대로 실행되지 않습니다. 소품이 생겼습니다.

우리는 이들 간의 차이점을 알고 싶으므로 소스 코드를 살펴보는 것이 가장 좋습니다. 코드 길이에 겁먹지 말고 몇 가지 핵심 문장만 살펴보겠습니다.

attr: function( elem, name, value, pass ) { 
var ret, hooks, notxml, 
nType = elem.nodeType; 
// don't get/set attributes on text, comment and attribute nodes 
if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { 
return; 
} 
if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) { 
return jQuery( elem )[ name ]( value ); 
} 
// Fallback to prop when attributes are not supported 
if ( typeof elem.getAttribute === "undefined" ) { 
return jQuery.prop( elem, name, value ); 
} 
notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); 
// All attributes are lowercase 
// Grab necessary hook if one is defined 
if ( notxml ) { 
name = name.toLowerCase(); 
hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); 
} 
if ( value !== undefined ) { 
if ( value === null ) { 
jQuery.removeAttr( elem, name ); 
return; 
} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { 
return ret; 
} else { 
elem.setAttribute( name, value + "" ); 
return value; 
} 
} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { 
return ret; 
} else { 
ret = elem.getAttribute( name ); 
// Non-existent attributes return null, we normalize to undefined 
return ret === null ? 
undefined : 
ret; 
} 
}
로그인 후 복사

prop 메서드 코드(jQuery 버전 1.8.3)

prop: function( elem, name, value ) { 
var ret, hooks, notxml, 
nType = elem.nodeType; 
// don't get/set properties on text, comment and attribute nodes 
if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { 
return; 
} 
notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); 
if ( notxml ) { 
// Fix name and attach hooks 
name = jQuery.propFix[ name ] || name; 
hooks = jQuery.propHooks[ name ]; 
} 
if ( value !== undefined ) { 
if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { 
return ret; 
} else { 
return ( elem[ name ] = value ); 
} 
} else { 
if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { 
return ret; 
} else { 
return elem[ name ]; 
} 
} 
}
로그인 후 복사

attr 메소드에서 가장 중요한 코드 두 줄은 elem.setAttribute(name, value "") 및 ret = elem.getAttribute(name)입니다. DOM API setAttribute 및 getAttribute 메소드 작업이 사용되는 것은 분명합니다. . 속성 요소 노드.
prop 메소드에서 가장 중요한 코드 두 줄은 return (elem[ name ] = value ) 와 return elem[ name ] 입니다. document.getElementById(el)[name] = value 는 다음과 같습니다. 객체의 JS A 속성으로 변환됩니다.

이제 원리를 이해했으니 예를 살펴보겠습니다.

<input type="checkbox" id="test" abc="111" />
로그인 후 복사

$(function(){ 
el = $("#test"); 
console.log(el.attr("style")); //undefined 
console.log(el.prop("style")); //CSSStyleDeclaration对象 
console.log(document.getElementById("test").style); //CSSStyleDeclaration对象 
});
로그인 후 복사

el.attr("style")은 undefed를 출력합니다. attr은 획득한 이 객체의 속성 노드 값이기 때문입니다. 당연히 현재로서는 그러한 속성 노드가 없으므로 자연스럽게 undefound가 출력됩니다.
el.prop("style")은 CSSStyleDeclaration 객체를 출력합니다. DOM 객체의 경우 기본 스타일 객체 속성이 있으므로 스타일 객체
가 출력됩니다. document.getElementById("test").style은 위와 동일합니다

계속 읽어보세요:

el.attr("abc","111") 
console.log(el.attr("abc")); //111 
console.log(el.prop("abc")); //undefined
로그인 후 복사


먼저 attr 메소드를 사용하여 이 객체에 abc 노드 속성을 값 111로 추가합니다. HTML의 구조도 변경된 것을 볼 수 있습니다

el.attr("abc")의 출력 결과는 111이며 이는 정상입니다
el.prop("abc")는 abc가 이 속성 노드에 있기 때문에 정의되지 않은 결과를 출력하므로 prop

을 통해 얻을 수 없습니다.

el.prop("abc", "222"); 
console.log(el.attr("abc")); //111 
console.log(el.prop("abc")); //222
로그인 후 복사

그런 다음 prop 메소드를 사용하여 이 객체의 abc 속성을 값 222로 설정합니다. HTML의 구조가 변경되지 않은 것을 볼 수 있습니다. 출력 결과는 설명되지 않습니다.

원리는 위에 명확하게 설명되어 있으므로 언제 사용할지 스스로 결정할 수 있습니다.

선택됨, 선택됨, 읽기 전용 및 비활성화와 같은 속성을 가져오거나 설정하려면 다음과 같은 prop 메서드를 사용하는 것이 분명히 더 좋습니다.

<input type="checkbox" id="test" checked="checked" />
로그인 후 복사
console.log(el.attr("checked")); //checked 
console.log(el.prop("checked")); //true 
console.log(el.attr("disabled")); //undefined 
console.log(el.prop("disabled")); //false
로그인 후 복사


분명히 부울 값은 문자열 값보다 다음 처리를 더 합리적으로 만듭니다.

PS, JS 성능에 집착한다면 attr이 DOM 속성 노드에 액세스해야 하고 DOM에 액세스하는 데 가장 시간이 많이 걸리기 때문에 prop의 성능은 확실히 더 높습니다. 이 상황은 다중 옵션 전체 선택 및 역선택 상황에 적용됩니다.

일부 브라우저는 비활성화됨과 확인됨만 작성하면 되는 반면, 다른 브라우저에서는 체크박스의 확인됨 속성을 가져오기 위해 attr("checked")를 사용할 때와 같이 비활성화 = "비활성화", 확인됨="체크됨"으로 작성해야 한다는 것을 누구나 알고 있습니다. 선택하면 값을 얻을 수 있습니다. 값은 "체크"되지만 선택하지 않을 때 얻은 값은 정의되지 않습니다.

jq는 이 문제를 해결하기 위해 이러한 속성을 가져오는 새로운 메소드 "prop"를 제공합니다. 과거에는 checked 속성을 가져오기 위해 attr을 사용할 때 이제 prop을 사용할 때 "checked"와 ""를 반환했습니다. 속성을 가져오는 메서드를 사용하면 true와 false를 균일하게 반환합니다.

그럼 언제 attr()을 사용하고 언제 prop()을 사용합니까?
1. 속성 이름을 추가하면 속성이 적용됩니다. prop();
을 사용해야 합니다. 2. prop()을 사용하면 true와 false 두 가지 속성이 있습니다.
3. 다른 경우에는 attr();
을 사용하세요. 프로젝트에서 jquery를 업그레이드할 때 모두가 이 점에 주의해야 합니다!

다음은 attr() 및 prop() 사용에 대한 공식적인 권장 사항입니다.

다음은 attr() 및 prop() 사용에 대한 공식적인 권장 사항입니다.

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

'[Vue 경고]: 필수 속성 누락' 오류 해결 방법 '[Vue 경고]: 필수 속성 누락' 오류 해결 방법 Aug 26, 2023 pm 06:57 PM

"[Vuewarn]:Missingrequiredprop" 오류를 해결하는 방법 Vue 애플리케이션을 개발할 때 "[Vuewarn]:Missingrequiredprop"라는 일반적인 오류 메시지가 나타나는 경우가 있습니다. 이 오류는 일반적으로 구성 요소에 필수 속성 값이 부족하여 구성 요소가 제대로 렌더링되지 않음을 나타냅니다. 이 문제에 대한 해결책은 간단합니다. 몇 가지 기술과 규정을 통해 이 오류를 방지하고 처리할 수 있습니다. 다음은 몇 가지 해결 방법입니다.

'[Vue 경고]: 잘못된 속성: 잘못된 값' 오류 해결 방법 '[Vue 경고]: 잘못된 속성: 잘못된 값' 오류 해결 방법 Aug 25, 2023 pm 02:51 PM

"[Vuewarn]:Invalidprop:invalidvalue" 오류를 해결하는 방법 Vue.js를 사용하여 애플리케이션을 개발할 때 종종 오류와 경고가 발생합니다. 일반적인 오류 중 하나는 "[Vuewarn]:Invalidprop:invalidvalue"입니다. 이 오류는 일반적으로 Vue 구성 요소의 속성에 잘못된 값을 전달하려고 할 때 발생합니다. 이번 글에서는 이 오류의 근본 원인을 살펴보겠습니다.

'[Vue warning]: Invalid prop: type check' 오류 해결 방법 '[Vue warning]: Invalid prop: type check' 오류 해결 방법 Aug 26, 2023 pm 10:40 PM

"[Vuewarn]:Invalidprop:typecheck" 오류를 수정하는 방법 Vue.js는 사용자 인터페이스 구축에 널리 사용되는 JavaScript 프레임워크입니다. Vue.js를 사용하여 애플리케이션을 개발할 때 때때로 "[Vuewarn]:Invalidprop:typecheck"라는 오류 메시지가 나타나는 경우가 있습니다. 이 오류는 일반적으로 구성 요소의 속성을 잘못 사용하여 발생합니다.

'[Vue 경고]: 잘못된 속성: 사용자 정의 유효성 검사기' 오류 해결 방법 '[Vue 경고]: 잘못된 속성: 사용자 정의 유효성 검사기' 오류 해결 방법 Aug 20, 2023 pm 10:53 PM

"[Vuewarn]:Invalidprop:customvalidator" 오류를 해결하는 방법 Vue를 사용하는 개발 프로세스 중에 경고 및 오류 메시지가 자주 발생합니다. 일반적인 오류 메시지 중 하나는 "[Vuewarn]:Invalidprop:customvalidator"입니다. 이 오류 메시지가 발생하는 이유는 사용자 정의 유효성 검사기 기능을 사용할 때 전달된 구성 요소의 유효성을 올바르게 검사하지 못하기 때문입니다.

'[Vue 경고]: Prop을 직접 변경하지 마십시오' 오류 해결 방법 '[Vue 경고]: Prop을 직접 변경하지 마십시오' 오류 해결 방법 Aug 17, 2023 pm 05:21 PM

"[Vuewarn]:Avoidmutatingapropdirectly" 오류를 해결하는 방법 Vue.js를 사용하여 프로젝트를 개발할 때 "[Vuewarn]:Avoidmutatingapropdirectly"라는 일반적인 경고 메시지가 나타날 수 있습니다. 이 경고 메시지의 의미는 props 속성의 값을 직접 변경해서는 안 되며 상위 구성 요소가 pro 속성을 변경할 수 있도록 이벤트를 트리거해야 한다는 것입니다.

'[Vue 경고]: 소품을 직접 변경하지 마세요' 오류 처리 방법 '[Vue 경고]: 소품을 직접 변경하지 마세요' 오류 처리 방법 Aug 17, 2023 am 11:12 AM

"[Vuewarn]:Avoidmutatingapropdirectly" 오류 처리 방법 Vue.js를 사용하여 웹 애플리케이션을 개발할 때 종종 경고나 오류가 발생합니다. 일반적인 경고 중 하나는 "[Vuewarn]:Avoidmutatingapropdirectly"입니다. 이는 구성 요소의 상위 구성 요소가 전달한 속성(prop)을 직접 수정한다는 의미입니다. 이 기사에서 우리는

'[Vue 경고]: 잘못된 속성: 업데이트 값' 오류 해결 방법 '[Vue 경고]: 잘못된 속성: 업데이트 값' 오류 해결 방법 Aug 26, 2023 pm 08:19 PM

"[Vuewarn]:Invalidprop:updatevalue" 오류를 해결하는 방법 Vue 개발 시 "[Vuewarn]:Invalidprop:updatevalue" 오류가 자주 발생합니다. 이 오류는 일반적으로 상위 구성 요소가 하위 구성 요소에 잘못된 값을 전달함으로써 발생합니다. 이 오류는 치명적인 오류가 아니라 Vue 경고이지만 프로그램의 견고성을 보장하려면 제때에 해결되어야 합니다. 이 글에서 소개할

Vue 컴포넌트 통신의 다중 레벨 전달 방식 비교 Vue 컴포넌트 통신의 다중 레벨 전달 방식 비교 Jul 18, 2023 pm 03:21 PM

Vue 컴포넌트 통신의 다중 레벨 전달 방식 비교 Vue는 컴포넌트 기반 개발 방법을 제공하고 컴포넌트의 중첩 및 통신을 통해 복잡한 애플리케이션 개발을 실현하는 매우 인기 있는 프런트엔드 프레임워크입니다. 실제 개발에서는 컴포넌트 간 통신이 중요한 이슈가 되는 경우가 많습니다. 구성 요소 간에 다단계 관계가 있는 경우 데이터를 효율적으로 전송하는 방법은 개발자가 고려해야 할 문제가 됩니다. 이 기사에서는 몇 가지 일반적인 다중 레벨 구성 요소 통신 방식을 소개하고 비교해 보겠습니다. props 및 $emitVue를 사용하여 제공

See all articles