2016-12-24 3 views
3

Я хочу, чтобы все мои высоты div равны первому ребенку внутри div здесь У меня есть три div p , p2 , p3, которые находятся внутри другого div, называемого (класс) r, я хочу, чтобы мой p2 , p3 такой же высоты до p.Почему не мой все div внутри div получает высоту firstChild

HTML

<div> 
    <div class="r"> 
    <div class="p">fgdsgs</div> 
    <div class="p2">sdgdfg</div> 
    <div class="p3">sdgdfg</div> 
    </div> 
</div> 

CSS

.p,.p2,.p3{ 
    display:inline-block; 
    width:80px; 
} 
.p{ 
    height:50px; 
} 

JS

var firstChild = document.querySelector(".r:first-child"); 
var descendant = firstChild.querySelectorAll(".p, .p2,.p3"); 

[].forEach.call(descendant, function(itm){ 
    itm.style.backgroundColor = "green"; 
    var ch = document.getElementsByClassName("p").clientHeight; 
    for(var i = 0 ;i < ch.length; i++){ 
    itm.style.height = ch[i] + "px"; 
    } 
}); 

Demo - https://jsfiddle.net/104sn7mu/13/

Edit 1

петли добавлены

+0

https://jsfiddle.net/104sn7mu/10/ –

+0

меняется высоту с помощью скрипта требуется? Почему бы не из CSS? – Deep

+0

будет работать с jquery? – ab29007

ответ

0

вы можете использовать переменную, которую вы сделали ранее, как это:

var firstChild = document.querySelector(".r:first-child"); 
var descendant = firstChild.querySelectorAll(".p, .p2,.p3"); 

[].forEach.call(descendant, function(itm){ 
    itm.style.backgroundColor = "blue"; 
    var ch = firstChild.clientHeight; 
    itm.style.height = ch + "px"; 
}); 
+0

спасибо, но я забыл добавить петлю – Anjali

+0

Что вы пытаетесь достичь с помощью цикла? пытаетесь ли вы постепенно увеличивать размеры блоков? – grimmysilencio

2

Вы выбрали .r и хранится первый ребенок в var firstChild, так что используйте, что как указано ниже,

var firstChild = document.querySelector(".r:first-child"); 
 
var descendant = firstChild.querySelectorAll(".p, .p2,.p3"); 
 

 
[].forEach.call(descendant, function(itm){ 
 
    itm.style.backgroundColor = "green"; 
 
    var ch = firstChild.clientHeight; 
 
    itm.style.height = ch + "px"; 
 
});
.p,.p2,.p3{ 
 
    display:inline-block; 
 
    width:80px; 
 
} 
 
.p{ 
 
    height:50px; 
 
}
<div> 
 
    <div class="r"> 
 
    <div class="p">fgdsgs</div> 
 
    <div class="p2">sdgdfg</div> 
 
    <div class="p3">sdgdfg</div> 
 
    </div> 
 
</div>

+0

Я еще не видел синтаксис '[] .forEach ...', это похоже на его создание пустого массива «на лету», но затем, если его пустые - как вы можете предвидеть элементы пустого массива ? –

+0

@the_velour_fog, см. ['Function # call'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call). –

+0

@ AndréDion спасибо, да, теперь я вижу. В основном 'descendant = firstChild.querySelectorAll (" .p, .p2, .p3 ");' делает 'потомком' [список узлов] (https://developer.mozilla.org/en/docs/Web/API/NodeList), содержащий все элементы, содержащие классы 'p',' p2', 'p3'. Затем '[] .forEach.call' в основном« заимствует »' forEach' из прототипа [array prototype] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) и вызывать его с использованием 'descendant' как этого и передавая обратный вызов. im угадывает его потому что nodelist не имеет 'forEach'? –

0

var r = document.querySelectorAll(".r"); 
 
r.forEach(function(pel){ 
 
var rChildren = pel.querySelectorAll(".p, .p2,.p3"); 
 
rChildren.forEach(function(el){ 
 
    el.style.backgroundColor = "green"; 
 
    var ch = rChildren[0].clientHeight; // 1st child clientHeight of all elements under div having class r 
 
    el.style.height = ch + "px"; 
 
}); 
 
});
.p,.p2,.p3{ 
 
    display:inline-block; 
 
    width:80px; 
 
} 
 
.p{ 
 
    height:50px; 
 
}
<div> 
 
    <div class="r"> 
 
    <div class="p">fgdsgs</div> 
 
    <div class="p2">sdgdfg</div> 
 
    <div class="p3">sdgdfg</div> 
 
    </div> 
 
</div>

var r = document.querySelectorAll(".r"); 
 
r.forEach(function(pel){ 
 
var rChildren = pel.querySelectorAll(".p, .p2,.p3"); 
 
rChildren.forEach(function(el){ 
 
    el.style.backgroundColor = "green"; 
 
    var ch = rChildren[0].clientHeight; // 1st child clientHeight of all elements under div having class r 
 
    el.style.height = ch + "px"; 
 
}); 
 
});
.p,.p2,.p3{ 
 
    display:inline-block; 
 
    width:80px; 
 
} 
 
.p{ 
 
    height:50px; 
 
}
<div> 
 
    <div class="r"> 
 
    <div class="p">fgdsgs</div> 
 
    <div class="p2">sdgdfg</div> 
 
    <div class="p3">sdgdfg</div> 
 
    </div> 
 
    <br><br> 
 
    <div class="r"> 
 
    <div class="p">fgdsgs</div> 
 
    <div class="p2">sdgdfg</div> 
 
    <div class="p3">sdgdfg</div> 
 
    </div> 
 
</div>

+0

проверьте петлю, пожалуйста, – Anjali

+0

@ Anjali made редактирование, я думаю, теперь это намного яснее. –

Смежные вопросы