Я настроил jsperf , чтобы проверить действительные предложения, сделанные другими людьми, и еще одну идею.
Удивительно, но метод с использованием $.has
примерно в 3 раза быстрее, чем с использованием $.closest
(так как он делегирует браузеру document.element.contains
, тогда как $.closest
выполняет некоторые манипуляции с селекторами и пересекает дерево DOM). Это также быстрее, чем $("div").not("#" + id + " *")
примерно на такую же разницу.
Итак, самый быстрый метод -
$("input").filter(function() {
return !$(excludedNode).has(this).length;
});
и использование $.closest
, которое интуитивно чувствуется как самый быстрый способ, на самом деле является самым медленным