LINUX.ORG.RU

Зачем придумали .addBack() в jquery?

 ,


0

1

jQuery почему-то на выборках скипает ноды самого верхнего уровня, и чтобы их «добавить обратно» надо дергать .addBack(). Когда работаешь с контентом, где нет рутовой ноды (например, куча параграфов из редактора), довольно напрягает.

Вопрос: нафига в jQuery такая странная химия? В этом есть хоть какой-то смысл? Можно ли это как-то выключить нах?

PS. Любители vanilla js могут идти лесом, у меня изоморфный код, и на сервере он бегает с cheerio.

★★★★★

Последнее исправление: Vit (всего исправлений: 1)

Ни разу на такое не натыкался. Пример кода можно?

А если обернуть эти <p> и что там еще будет в одного родителя? Всмысле всегда работать в контексте родителя, из него выбирать, в него вставлять. Я понимаю — костыль, но он же решит проблему.

deep-purple ★★★★★
()

.addBack()

Ни разу не встречал этого. Прозреваю, что какая-то костылестроительная фича.

r_asian ★☆☆
()

у меня изоморфный код, и на сервере
на выборках скипает ноды

Лесом должен сходить тот, у кого за каким-то хером ноды на сервере.

Goury ★★★★★
()
Ответ на: комментарий от Goury

Лесом должен сходить тот, у кого за каким-то хером ноды на сервере.

хер у тебя в голове

jQuery почему-то на выборках скипает ноды самого верхнего уровня

пример? addBack вроде добавляет предыдущую выборку и к скипу скорее всего не имеет отношения

dib2 ★★★★★
()
Ответ на: комментарий от dib2

пример? addBack вроде добавляет предыдущую выборку и к скипу скорее всего не имеет отношения

<p class=«foo»></p>
<p class=«bar»></p>

Если возьмешь подобный партиал (без body/html нод), то все выборки `p` будут пустые, пока не дернешь .addBack(). Ноды первого уровня по дефолту зачем-то скипаются.

Подтребность такая бывает, когда разметку текста обрабатываешь. Обертывать рутовой нодой или юзать домовские селекторы - не вариант.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

что-то типа

$("<p class=«foo»></p><p class=«bar»></p>").find("p")

?

ну тогда все верно, $() возвращает массив p, find применяется к каждому p, а addBack добавляет результаты $().

Description: Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.

dib2 ★★★★★
()

жекверя-программист негодуе на свою жекверю, что может быть забавней

anonymous
()
Ответ на: комментарий от dib2

что-то типа

Именно так.

ну тогда все верно, $() возвращает массив p, find применяется к каждому p, а addBack добавляет результаты $().

Оно соответствует описанию (спасибо что объяснил), а хочется чтобы соответствовало потребностям юзера.

Есть какой-то способ писать выражения без .addBack(), но при этом не добавляя других костылей?

Vit ★★★★★
() автор топика
Ответ на: комментарий от dib2

Спасибо. Пойду разбираться, почему его сразу не воткнули.

Vit ★★★★★
() автор топика
Ответ на: комментарий от dib2

Вроде как .filter() выбирает только на верхнем уровне и не лезет вглубь. Не совсем то что хотелось бы (надо чтобы искало везде).

Например, параграфы могут быть как на верхнем уровене, так и внутри списка. С картинками и видео аналогично.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Если возьмешь подобный партиал (без body/html нод)

Ой ну. Оборачивать же надо в documentFragment! Или в любую другую ноду.

anonymous
()
Ответ на: комментарий от dib2

В общем, подкрутили, чтобы была рутовая нода. Не так страшно оказалось, как думал.

Vit ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.