jQuery переносит синтаксис

Это - конец дня. Я надеюсь, что у меня просто есть ошибка логики.

Я не могу заставить это работать:

var $divA= $("<div></div>").addClass('classA');

var $divB= $("<div></div>").addClass('classB');

$myDiv.after($divA.wrap($divB));

Вышеупомянутое должно повернуть это:

<div id="myDiv"></div>

В это:

<div id="myDiv"></div>
<div class="classB">
    <div class="classA"></div>
</div>

Но это, кажется, не работает с тем 'переносом' там. Я не получаю ошибок, это просто не переносит диву с divB и просто вводит диву отдельно.

Я - недоразумение, переносятся?

ОБНОВЛЕНИЕ:

Более простой пример, который не работает:

$myBox.after($("<p></p>").wrap("<div></div>"));

Это добавит просто DIV после myBox.

Кажется, что jQuery не нравится, переносятся добавленный к после.

7
задан Machavity 18 April 2019 в 12:44
поделиться

4 ответа

Вы пытались

$myDiv.after($divA.wrap('<div class="divB"></div>'));

только для целей тестирования?

Насколько я понимаю, вы не должны проходить Объект jQuery к функции обертывания:

Функция .wrap () может принимать любые строка или объект, который может быть передан к функции завода $ () на Укажите Структура DOM . Эта структура может быть вложенный несколько уровней глубоко, но должен содержать только один изнутри. То структура будет обернута вокруг каждого элементов в наборе сопоставленных элементы.

Если пример выше работает, то это причина; -)

3
ответ дан 7 December 2019 в 01:21
поделиться

Согласно W3C и этот сайт элемент < form > в 1,1 XHTML может содержать только элементы уровня блока и < fieldset > .


Что касается почему ... Я считаю, что причина, по которой форма может содержать только элементы блочного уровня, заключается в том, что она не считается элементом сама по себе, а скорее оберткой вокруг других элементов. Было некоторое обсуждение этого в списках рассылки w3c несколько лет назад, что я смог откопать - но ничего, что на самом деле ответило на вопрос.

-121--4293887-

Компилятор лучше оптимизирует оператор switch, чем оператор if.

Компилятор не знает, важен ли для вас порядок вычисления операторов if, и не может выполнить оптимизацию. Вы можете вызывать методы в операторах if, влияя на переменные. С помощью оператора switch он знает, что все предложения могут быть оценены одновременно и могут привести их в любой порядок, который наиболее эффективен.

Вот небольшое сравнение:
http://www.blackwasp.co.uk/SpeedTestIfElseSwitch.aspx

-121--970480-

Я получил это для работы:

$('div#myDiv').after("<div class='classA'></div>").end().find('.classA').wrap("<div class='classB'></div>");

с вашим html для решения вашего первоначального вопроса. Здесь - источник конечной функции jQuery. Этот код приведет к тому, что цепь поднимется на один уровень (до уровня myDiv), а затем обернется на основе поиска («.classA») на этом уровне. Это найдет ваш div добавлен с после, и обернуть его в div с классом B.

Изменить: Хорошо, я думаю, что это будет работать для вас так, как вы хотите:

var divA= $("<div></div>").addClass('classA');
$('div#myDiv').after($(divA).wrap('<div class="divB" />'));

Я думаю, что проблема была в том, что при вызове wrap на divA, это должен быть объект jQuery, чтобы работать правильно. Так что на самом деле, тебя не хватало только обертывания divA в ().

1
ответ дан 7 December 2019 в 01:21
поделиться

Вы не ищете обертку. Вы хотите:

divB.append(divA).insertAfter('#myDiv');
1
ответ дан 7 December 2019 в 01:21
поделиться

Может быть, я читаю это неправильно, но если вы используете jQuery, разве $ не зарезервированный символ? Вы пробовали просто задать имена переменных, чтобы они не использовали его?

Если да:

var divA = $("<div></div>").addClass('classA');
divA.wrap("<div class=\"classB\"></div>");
divA.insertAfter($("#myDiv"));

или

divA.after($("#myDiv"));

Вот документы jQuery по этому вопросу.

0
ответ дан 7 December 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: