После обратной связи завершите переписывание вопроса.
У меня есть следующая разметка:
<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)');
Я делаю это, чтобы получить все содержимое тела, кроме div, с идентификатором "do-not-modify-me".
Теперь, допустим, я хочу создать функцию, которая позволит другому программисту выбирать что-либо в теле, так же как выбор с помощью jquery. Другой программист не должен изменять 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.
ТЕСТ-КОД не работает, потому что в настоящее время он применяет css () к дочерним элементам результата контекста, а не к самому результату.
E.G:
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? Вы можете изменить любую часть кода.