피드백이 끝나면 질문을 다시 작성하십시오.복잡한 jquery CSS 선택기를 캐싱을위한 컨텍스트로 바꿈
나는까지 다음 표시했다 : 나는에 액세스 할 수 있습니다
<body>
<h1>Title</h1>
<p>bla</p>
<div>
... <!-- a thousand tags -->
</div>
<div id="do-not-modify-me">
<!-- a hundred tags -->
</div>
</body>
:
<h1>Title</h1>
<p>bla</p>
<div>
... <!-- a thousand tags -->
</div>
는 사용 :
$('body > *:not(div#do-not-modify-me)');
나는 그래서 나는 모든 콘텐츠를 얻을 수 있습니다 않는다 id가 "do-not-modify-me"인 div를 제외한 본문의
이제 다른 프로그래머가 jquery를 사용하는 select와 마찬가지로 본문에서 아무 것도 선택할 수 있도록하는 함수를 작성한다고 가정 해 보겠습니다. 다른 프로그래머는 div # do-not-modify-me를 수정해서는 안되지만 걱정하지 않아도됩니다.
$('body > *:not(div#do-not-modify-me)')
은 많은 시간이 소요되므로 캐시 할 것입니다.
생각은 다음과 같습니다
// TEST CODE
windows.new_body = $('body > *:not(div#do-not-modify-me)');
function select(selector) {
return $(selector, windows.new_body);
}
그래서 다른 프로그래머가 할 수 있어야한다 :
// TEST RESULT CODE
select("p").css("color", "red");
그것은 빨간색으로 색칠하는 모든 본문에 <p>
있지만 사람 div # do-not-modify-me에 포함되어 있습니다.
현재 TEST CODE가 작동하지 않습니다. 왜냐하면 현재는 결과 자체가 아니라 결과의 하위 항목에 css()를 적용하기 때문입니다.
예컨대 :
select("p").css("color", "red");
동작 해 같은 :
$('body > * p :not(div#do-not-modify-me)').css("color", "red");
원하는 결과가 될 것이다 동안 :
$('body > p :not(div#do-not-modify-me)').css("color", "red");
참고 :
$('body > * :not(div#do-not-modify-me)').parent().css("color", "red");
<p>
div # do-not-modify-me가 빨간색으로 변하기 때문에 작동하지 않습니다.
TEST RESULT CODE에서 어떻게 결과를 얻을 수 있습니까? 코드의 일부를 수정할 수 있습니다.
그렇지 않습니다. 나는 약간의 설명을 덧붙였다. 그것이 더 명확 할 것이기를 바란다. 아직 비밀 스럽다면 알려주세요. –
이전 질문을 살펴 보았습니다. 꽤 명확하지 않습니다. 여기에 HTML 마크 업을 넣고 다른 시나리오에서 예제를 설명하십시오. –
나는 내 대답에 최근 코멘트를 남겼다. 나는 당신이 더 이상하고 싶은 것을 얻지 않습니다. 좀 더 이해할 수 없기 때문에 질문을 다시 작성하고 샘플을 포함시켜 주시겠습니까? –