Работа функции each и detach?

К примеру есть вот такой вот список на странице.
<li>Soup Du Jour
                        <ul class="menu_list">
                            <li class="meat">grilled steak</li>
                            <li>mushrooms</li>
                            <li>seasonal vegetables</li>
                            <li>vegetable broth </li>
                        </ul>
                    </li>
                    <li>Hot and Sour Soup
                        <ul class="menu_list">
                            <li class="meat">roasted pork</li>
                            <li>carrots</li>
                            <li>Chinese mushrooms</li>
                            <li>chili</li>
                            <li>vegetable Broth </li>
                        </ul>
                    </li>
                    <li>Stuffed Baked Potato
                        <ul class="menu_list">
                            <li>potato</li>
                            <li class="meat">charbroiled or blackened chicken</li>
                            <li>seasonal veggies</li>
                            <li>cheddar &amp; jack cheese</li>
                            <li>creamy alfredo sauce</li>
                        </ul>
                    </li>


На странице есть две кнопки. По щелчку на одну я: Вставляю строки и удаляю и запомининаю( как то так )

$('.meat').after('<li class="tofu"><em>Tofu</em></li>');
$m = $('.meat').detach();


По щелчку на другую: делаю обратный маневр

$('.tofu').each(function(i){
                $(this).after($m[i]);
$('.tofu').remove();


Все работает правильно. Но вот вопрос каким образом интерпретатор понимает в какой menu_list вставлять ?

Почему он к примеру не вставляет все в один, а вставляет в разные ?
  • Вопрос задан
  • 2319 просмотров
Решения вопроса 1
Ivan-P
@Ivan-P
Первый код:
$('.meat') создает масив;
.after('<li class="tofu"><em>Tofu</em></li>') добавляет присле каждого элемента масива пункт меню Tofu.
$m = $('.meat').detach(); - заносите масив в переменную, и отключаете от DOM.

Второй код:
Так как элементы<li class="meat"> разные, то используется .each(function(i){$(this).after($m[i]);, где каждому tofu[0] подставляется свой meat[0], tofu[1] - meat[1] и так далее.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
nazarpc
@nazarpc
Open Source enthusiast
Оно как-то слишком криво у вас написано, и если работает правильно - то это совпадение.
$('.meat') выберет все три, но судя по тому что вы кликаете вам нужно что-то одно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы