反馈后,完成问题的重写。
我有以下标记:
<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 进行选择一样。其他程序员不应该修改 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() 应用于上下文结果的子级,而不是它自身的结果。
例如:
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 中的结果?您可以修改代码的任何部分。