> 웹 프론트엔드 > JS 튜토리얼 > querySelector를 다시 사용하지 않는 이유

querySelector를 다시 사용하지 않는 이유

DDD
풀어 주다: 2025-01-14 14:34:43
원래의
196명이 탐색했습니다.

Why I won

JavaScript 생태계는 항상 진화하고 있으며 이제는 또 다른 미래의 물결이 일어날 때입니다.

jQuery가 document.querySelector() 및 document.querySelectorAll()로 브라우저에 구워졌을 때 우리 모두는 그것을 좋아했습니다. DOM 메소드를 사용하면 DOM 액세스가 훨씬 더 쉬워집니다.

최근에 document.querySelector()와 document.querySelectorAll()을 모두 사용하는 것은 Javascript의 많은 유용한 기능을 놓치면서 먼 과거를 고수하는 것임을 실제로 증명하는 경험을 했습니다.

document.querySelector() 및 document.querySelectorAll()을 사용하면 DOM 구조를 해제하고 DOM에 일관되게 액세스할 수 없으며 여러 선택을 단순화하고 입력 어려움을 줄일 수 없습니다. 이제 여러분이 이미 놓치고 있는 모든 것을 깨달을 수 있도록 더 깊이 들어가 보겠습니다.

하지만 잠깐만요! querySelector() 및 querySelectorAll()이 무엇인지 실제로 이해하지 못하고 이에 대해 자세히 알아보고 싶다면; 아래 비디오 튜토리얼을 확인하세요: JavaScript DOM 조작

일관성 없는 방법

document.querySelector() 및 document.querySelectorAll()은 DOM 선택 시 일관성이 없습니다. 하나는 대상 선택기의 첫 번째 인스턴스를 선택하고 다른 하나는 대상 선택기의 모든 인스턴스를 선택합니다. 즉, 하나는 개별 요소를 선택하는 데 사용되고 다른 하나는 요소 그룹을 선택하는 데 사용됩니다.

따라서 두 가지를 서로 바꿔서 사용할 수는 없습니다. 선택하려는 항목에 따라 계속 전환해야 합니다.

// Select the first element of the class .post
const post = document.querySelector('.post');

// Select all elements of the class .post
const posts = document.querySelectorAll('.post');
로그인 후 복사
로그인 후 복사

이제 더 나은 방법을 보여드리겠습니다. 방금 $select()와 함께 제공되는 koras.jsx라는 UI 라이브러리를 만들었습니다
JavaScript에서 document.querySelector() 및 document.querySelectorAll() 대신 사용할 수 있으며 사용 방법은 다음과 같습니다.

//select all instances of class .post
const posts = $select('.post');

//select the first instance of class post
const firstPost = $select('.post[0]');

//Doing the same with querySelector

const posts = document.querySelectorAll('.post');
const firstPost = posts[0];
로그인 후 복사
로그인 후 복사

정말 멋지죠? 그리고 document.querySelector() 및 document.querySelectorAll() 모두의 사용 사례에서 작동합니다.

인덱스별 선택

그룹화된 요소 중 어느 위치에서나 요소를 선택할 수 있습니다.

//select 6th instance of class post
$select('.post[5]')

//select 7th instance of div elements
$select('div[6]')
로그인 후 복사
로그인 후 복사

요소 삭제

다음과 같이 $select()를 사용하여 요소를 삭제할 수 있습니다.

//Delete only the instance of .post with index is equal to 2
$select('.post[delete|i=2]');

//delete all instances of .post with index greater than 2 
$select('.post[delete|i>2]');
로그인 후 복사
로그인 후 복사

속성 추가

$select()like를 사용하여 요소에 속성을 추가할 수 있습니다.

$select('.post[add|class=hidden]');

$select('.post[add|style=1px solid red]');

$select('.post[add|id=2]');

$select('.post[add|class=flex bold]')
로그인 후 복사
로그인 후 복사

$select()like:
를 사용하여 요소에서 속성을 제거할 수 있습니다.

$select('.post[remove|class=hidden]');

$select('.post[remove|id]');

$select('.post[remove|class=flex bold]')

$select('.post[remove|style]');
로그인 후 복사
로그인 후 복사

DOM 구조 분해

DOM 구조 해제는 es6에 포함된 기능 중 하나이지만 document.querySelector() 및 document.querySelectorAll()로 선택한 요소를 구조 해제할 수 없다는 사실에 놀랄 것입니다.

작동하지 않음:
// Select the first element of the class .post
const post = document.querySelector('.post');

// Select all elements of the class .post
const posts = document.querySelectorAll('.post');
로그인 후 복사
로그인 후 복사
해결책:
//select all instances of class .post
const posts = $select('.post');

//select the first instance of class post
const firstPost = $select('.post[0]');

//Doing the same with querySelector

const posts = document.querySelectorAll('.post');
const firstPost = posts[0];
로그인 후 복사
로그인 후 복사

보이시나요? document.querySelectAll()은 DOM 구조 분해를 지원하지 않습니다. 이는 DOM을 구조화하는 과정을 놓치고 있음을 의미합니다. 아니요! 전혀 좋지 않으므로 $select()를 사용해야 합니다.

반복적인 방법

document.querySelect() 또는 document.querySelectorAll()을 사용하면 DOM 구조 분해를 지원하지 않고 JavaScript 코드를 유지 관리하기가 다소 복잡해지기 때문에 불필요하게 반복해야 합니다.

작동하지 않습니다
//select 6th instance of class post
$select('.post[5]')

//select 7th instance of div elements
$select('div[6]')
로그인 후 복사
로그인 후 복사
그래서 당신은해야합니다 :
//Delete only the instance of .post with index is equal to 2
$select('.post[delete|i=2]');

//delete all instances of .post with index greater than 2 
$select('.post[delete|i>2]');
로그인 후 복사
로그인 후 복사

이 작업이 얼마나 반복적이고 대규모로 코드베이스를 유지 관리하는 것이 얼마나 지저분해지는지 알 수 있나요?

아래와 같이 $select()를 사용하여 쉽게 동일한 작업을 수행할 수 있습니다.

해결책
$select('.post[add|class=hidden]');

$select('.post[add|style=1px solid red]');

$select('.post[add|id=2]');

$select('.post[add|class=flex bold]')
로그인 후 복사
로그인 후 복사

DOM 선택 디버깅의 어려움:

document.querySelector()를 사용하면 DOM 구조 분해 및 다중 선택 지원으로 인해 $select()에 비해 버그를 숨길 수 있는 노출 영역이 더 많이 생성되는 경향이 있습니다.

$select('.post[remove|class=hidden]');

$select('.post[remove|id]');

$select('.post[remove|class=flex bold]')

$select('.post[remove|style]');
로그인 후 복사
로그인 후 복사

$select()는 요소를 선택하기 위해 작성하는 코드 줄 수를 줄여 버그가 숨겨지는 표면적을 줄입니다. 이는 $select()를 사용하는 동안 버그가 비교적 빨리 발견될 가능성이 더 높다는 것을 의미합니다.

모든 배열 방법을 사용할 수 있습니다.

querySelector로 선택한 요소는 forEach에서만 작동할 수 있지만 map(), filter() 및 co에서는 작동하지 않습니다.

$select()는 불필요한 반복과 대규모 복잡성을 초래할 수 있는 몇 가지 해결 방법이 필요한 document.querySelectorAll()과 달리 기본적으로 모든 배열 메서드에서 작동합니다.

유지 관리성

유지관리성은 항상 사용 용이성, 간결성 및 일관성을 중심으로 이루어집니다. 간결하고 일관적이며 사용하기 쉬운 코드베이스는 유지 관리가 쉬운 경향이 있습니다. 특히 버그를 수정하거나 기능을 구축하는 동안 살펴볼 표면적이 더 많기 때문에 반복적이고 장황한 코드를 유지하는 것은 지저분합니다.

자바스크립트를 덜 사용하여 배송

가능한 경우 JavaScript를 적게 제공하는 것이 경험상 법칙이며 $select()를 사용하면 DOM 선택을 처리할 때 이를 가능하게 합니다. $select()는 더 간결하고 덜 반복적이므로 대규모로 document.querySelector() 및 document.querySelectorAll()보다 선호됩니다. 더 많은 요소를 선택할수록 $select()를 사용하여 선택을 반복하는 횟수가 줄어듭니다.

요소 배열을 추가하거나 앞에 추가합니다.

$select()에 의해 생성된 요소 배열을 element.append(arrayGeneratedBy$Select)와 같은 다른 요소에 추가할 수 없습니다. DOM은 NodeList를 기대하기 때문입니다.

그래도 두 번째 매개변수로 false를 전달하여 $select()에 모든 초능력을 비활성화하도록 지시할 수 있습니다.

 const [posts, comments] = document.querySelectorAll('.post, .comment');
로그인 후 복사

이제 추가 및 앞에 추가할 수 있는 일반 DOM NodeList[]를 반환합니다.

$select()는 그렇게 할 수 있습니다

$select()가 document.querySelect() 또는 document.querySelectorAll()이 할 수 있는 모든 작업을 수행할 수 있는지 궁금할 것입니다. 예! 그들이 하는 일은 무엇이든 할 수 있습니다. $select()는 모든 것을 할 수 있습니다. tagor CSS 선택기를 사용하고 query.querySelector()가 할 수 있는 다른 모든 작업을 수행할 수 있습니다.

document.querySelector()가 더 좋나요?

querySelector() 또는 querySelectorAll()이 평균 1밀리초로 $select()보다 빠르다고 주장할 수 있지만 $select()가 다시 승리합니다. 관심분야가 다양합니다.

querySelector 사용 방법을 이해하면 $select()와 같이 유용한 것을 구축할 수 있는 기회가 제공되므로 여전히 사용법을 배워야 합니다. 저는 $select()가 어떻게 작동하는지 잘 이해하고 있기 때문에 이를 구축할 수 있습니다.

저는 이에 대한 튜토리얼을 만들었습니다. 아래에서 확인해 보세요: JavaScript DOM 조작

내가 다시는 querySelector를 사용하지 않는 이유

DOM 구조 해제를 지원하고 배열 기반 선택을 가능하게 함으로써 $select()는 내 툴킷에 귀중한 추가 기능임이 입증되었습니다. 이는 코드의 가독성을 향상시킬 뿐만 아니라 버그 노출 영역을 최소화하여 디버깅 프로세스를 더욱 간단하게 만듭니다.

유지관리성, 간결성 및 일관성을 추구하는 과정에서 $select()는 DOM 선택을 위한 강력한 선택으로 떠오르며 JavaScript 개발 발전의 한 단계 발전을 보여줍니다.

진화하는 JavaScript 생태계에 계속 적응하면서 $select()와 같은 도구를 수용함으로써 코드를 더욱 간결하고 읽기 쉽고 유지 관리하기 쉽게 만들 수 있습니다.

위 내용은 querySelector를 다시 사용하지 않는 이유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿