Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Работа с деревом видимо (https://javascript.ru/forum/misc/70367-rabota-s-derevom-vidimo.html)

jay-S 31.08.2017 04:24

Работа с деревом видимо
 
Уважаемые вообще не знаю как сформулировать вот сразу к делу

<div class="block1">

<div class="block2_1">
</div>
<div class="block2_2">

<div class="block1">

<div class="block2_1">
</div>
<div class="block2_2">

<div class="block1">

<div class="block2_1">
</div>
<div class="block2_2">
</div>

</div>

</div>

</div>

</div>

</div>


$('.block1').each(function() {
var data1 = $(this).find('.block2_1').html(),
data2 = $(this).find('.block2_2').html();
$(this).replaceWith('<div></div>');
});



в чем проблема?
во-первых find ищет все совпадения этого класса, а нужно только внутри каждого блока

смысл в том чтобы была большая вложенность, но данные получались внутри каждого блока

и replaceWith заменяет сразу главный блок и все

я так понимаю нужно чтобы он изнутри делал чтобы replaceWith не заменял все??

вообщем знатоки подумайте скажите пожалуйста как сделать?

ksa 31.08.2017 08:55

Цитата:

Сообщение от jay-S
в чем проблема?

Пока так и не понятно... :no:

Что ты хочешь в итоге с этим хтмэлем сделать?

ksa 31.08.2017 08:59

Цитата:

Сообщение от jay-S
во-первых find ищет все совпадения этого класса, а нужно только внутри каждого блока

Так используй children()
https://jquery-docs.ru/children/

Dilettante_Pro 31.08.2017 13:59

Не совсем понял, но :(
<div class="block1">
   <div class="block2_1">
   </div>
   <div class="block2_2">
      2_2_1
      <div class="block1">
         <div class="block2_1">
         </div>
         <div class="block2_2">
            2_2_2
            <div class="block1">
               <div class="block2_1">
               </div>
               <div class="block2_2">
               2_2_3
               </div>
           </div>
         </div>
      </div>
   </div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
var reverseBlock = $(".block1").get().reverse();
$(reverseBlock).each(function() {
   var  data2 = $(this).find('.block2_2').text();
   alert(data2);
   $(this).replaceWith('<div></div>');
});
</script>

jay-S 01.09.2017 02:01

Вот хороший пример
<div class="block1">
<div class="block2">sample text</div>

<div class="block3">
<div class="block1">
<div class="block2">sample text</div>

<div class="block3">
<div class="block1">
<div class="block2">sample text</div>

<div class="block3">
<div class="block1">
<div class="block2">sample text</div>

<div class="block3">
<div class="block1">
<div class="block2">sample text</div>

<div class="block3">
</div>

</div>
</div>

</div>
</div>

</div>
</div>


$('.block1').each(function() {
var data1 = $(this).find('.block2').text();
alert(data1);
});


как видно в примере он берет каждый block1 и выводит что содержится в block2
и самое интересное он берет по цепочки короче смысл в том как изолировать блок который он проверяет и чтобы find не брал все классы ну вы понимаете меня?

тоесть он инфу в блоке .text берет вообще все проверьте через алерт

потом когда цепочка блока block1 уменьшается инфы меньше короче как изолировать чтобы вот он проверел в своем block1 и нелез дальше?

Белый шум 01.09.2017 06:18

$('.block1 .block2').each(function() {
    var data1 = $(this).text();
    alert(data1);
});

jay-S 01.09.2017 06:33

Белый шум а если мне внутри данные с нескольких блоков нужно собрать, то для каждых писать each?

нельзя сделать что-то типа var data1 = .find и указать типа > я хз чтобы он не ел другие блоки?

Белый шум 01.09.2017 07:26

Через запятую можно перечислять селекторы, как и в css:
$('.block1 .block2, .block1 .block3, .block1 .block4').each(function() {
    var data1 = $(this).text();
    alert(data1);
});

jay-S 01.09.2017 07:42

я имею ввиду можно както указать find'у чтобы он не собирал все что найдет а только первый попавшийся в своем боксе

ksa 01.09.2017 08:27

Цитата:

Сообщение от jay-S
можно както указать find'у чтобы он не собирал все что найдет а только первый попавшийся

Всегда можно после find() указать eq(0)... ;)
https://jquery-docs.ru/eq/


Часовой пояс GMT +3, время: 08:26.