다음과 같이 HTML 마크 업의 모든 div를 선택 (jQuery 사용) 할 수 있습니다.
$('div')
그러나 나는 위의 선택에서 특정 div
(가령 id="myid"
) 을 제외하고 싶습니다 .
Jquery 함수를 사용하여 어떻게 할 수 있습니까?
답변:
단순한:
$('div').not('#myid');
를 사용 .not()
하면에서 반환 한 집합에서 선택한 선택자와 일치하는 요소가 제거됩니다 $('div')
.
:not()
선택기를 사용할 수도 있습니다 .
$('div:not(#myid)');
두 선택기 모두 동일한 작업을 수행하지만 jQuery의 선택기 엔진 인 Sizzle이이를 네이티브 호출 로 최적화 할 수 있기 때문에 :not()
더 빠릅니다.querySelectorAll()
.
.not()
하다 멀리, 보다 나은 :not()
.
$('div:not(#myid)');
(따옴표없이) 있어야한다고 생각합니다 . @Raynos : 왜? :not()
CSS3 선택기입니다. 에 jQuery를 직접 선택을 전달할 수 있습니다 querySelectorAll
지원하는 경우 ...
.not
가독성이 떨어 집니다 . 나는 ": not selector in jQuery"라고 말 했어야했다
:not()
. 이 선택기는 선택기 4의 새로운 기능이 아니며 따옴표를 허용하도록 변경되지도 않았습니다. 그러나 더 복잡한 선택자를 허용하도록 변경되었습니다. 나는 당신의 코멘트 ... 오해하지 않는 한
querySelectorAll
를 수행했습니다. 실제 벤치 마크는 아니지만 jQuery 내부의 오버 헤드가 없으므로 예상 할 수 있습니다. :not()
빠른 사실이다, 지글 지글 알고 아마도 있기 때문에 사용을 최적화 할 수 있습니다querySelectorAll()
var els = toArray(document.getElementsByTagName("div"));
els.splice(els.indexOf(document.getElementById("someId"), 1);
구식 방식으로 할 수 있습니다. 너무 간단한 jQuery가 필요하지 않습니다.
전문가 팁 :
DOM 요소의 집합이 너무 좋아 사용, 단지 배열 toArray
A의 방법을 NodeList
.
세트에 요소를 추가하는 것은
set.push.apply(set, arrOfElements);
세트에서 요소를 제거하는 것은
set.splice(set.indexOf(el), 1)
한 번에 여러 요소를 쉽게 제거 할 수 없습니다.
.querySelector()
또는 .querySelectorAll()
with를 사용하는 div:not(#myid)
것이 더 빠릅니다 ... 그렇습니까?
$("div:not(#myid)")
더 빠를 것 입니다 ... 네이티브 Javascript 또는 .NET을 사용할 때 sizzlejs 최적화를 확인하십시오 . .querySelector()
.querySelectorAll()
그렇게해야합니다.
$('div:not("#myid")')