Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以修改jQuery id选择器?_Javascript_Jquery_Dom - Fatal编程技术网

Javascript 是否可以修改jQuery id选择器?

Javascript 是否可以修改jQuery id选择器?,javascript,jquery,dom,Javascript,Jquery,Dom,也许这是不可能的,但万一我遗漏了什么: 是否可以临时修改jQuery id选择器,以便对DocumentFragment或从DOM中删除的元素(而不是默认行为)进行操作 我提出这个问题的原因是,我试图优化一些遗留代码,这些代码利用id选择器来执行一些繁重的DOM操作。但是,所有这些ID都位于单个元素下。我读到,如果从dom中删除该元素,对其进行操作,然后重新插入,性能会更好。因为有那么多选择器,所以无法完成 旁注:通过在操作之前设置display:none,性能显著提高,但仍然很慢。选择器只能从

也许这是不可能的,但万一我遗漏了什么:

是否可以临时修改jQuery id选择器,以便对DocumentFragment或从DOM中删除的元素(而不是默认行为)进行操作

我提出这个问题的原因是,我试图优化一些遗留代码,这些代码利用id选择器来执行一些繁重的DOM操作。但是,所有这些ID都位于单个元素下。我读到,如果从dom中删除该元素,对其进行操作,然后重新插入,性能会更好。因为有那么多选择器,所以无法完成


旁注:通过在操作之前设置display:none,性能显著提高,但仍然很慢。

选择器只能从DOM中进行选择。您要做的是将这些片段存储为JavaScript变量

$p = $('p').remove();
// ...
$('body').append(someFunction($p));

如果在变量中存储对已删除元素的引用,则可以执行此操作:

// Get a div by id
var div = $('#thediv'); 
// Remove it from the DOM
div.remove();
// Change the color of the text inside it to red
// Notice we're selecting with the div as the context
$('p', div).css('color', 'red');
// Re-add div to DOM; text will be red
document.body.appendChild(div[0]);

不getElementById只能找到文档中存在的元素。但您始终可以使用其他遍历方法。选择器只能从DOM中进行选择。您要做的是将这些片段存储为JavaScript变量。您可以通过将单个祖先元素作为上下文传递来限制选择器的搜索。@jbabey性能损失不是因为搜索,而是因为对结果的操作。例如,在找到的元素上,创建10000个子元素,etc@pkExec这些操作的关键是首先创建所有元素,然后将它们作为一个大型更新推送到DOM中。