Я знаю, что вы уже приняли ответ, но я все равно его выброшу.
var foundIDs = containerElement.wrap('<div>') // Wrap
.parent() // Traverse up
.find('[id^=something]'); // Perform find
containerElement.unwrap(); // DOM is untouched
Поскольку вы разворачиваете containerElement
до завершения функции, DOM остается нетронутым (на случай, если вам интересно).
Я проверил это с помощью плагина livequery
, который никогда не обнаруживает новый div
.
Если вы зарегистрируете идентификатор (или любой другой) найденных идентификаторов, вы увидите, что верхним уровнем является ваш containerElement (если он соответствует критериям .find()
.
console.log( foundIDs.attr('id') ); // Log the ID of the root element.
EDIT:
Что касается тестирования, я выполнил итерационный цикл 1000 в обеих версиях против containerElement
только с 2 вложенными элементами.
Я тестировал только в Safari на Mac.
Принятый ответ был примерно в 7 раз быстрее.
Если я добавил 100 вложенных элементов, разрыв сократился менее чем в 2 раза.
Вот проблема. Обе версии вернули 0 элементов, если containerElement
не совпадает. Я не уверен, почему это так.