Clik по div'у
Есть div в нём вложено ещё 3 div'a . Нужно чтобы после клика по одному из вложенных div'ов выводилось куда-нибудь ( в тот же alert ) его содержимое например...
написал что-то типо <div id="id4"> <div class="class1" style="margin-left:25% "> 1 </div> <div class="class1">2 </div> <div class="class1" style="margin-right:10% " > 3</div> </div> и в window.onload = function () {}
var e = document.getElementById("id4");
for(var i =0; i < e.childNodes.length; i ++){
if(e.childNodes[i].nodeType == 1){
e.childNodes[i].onclick = function(){
//e.childNodes[i].innerHTML = "white"; (*)
alert("работает !!!");
};
}
}
ВОПРОС 1 ) Объясните почему не работает строка (*) ... все перепробовал( и подскажите как это сделать-то.... ВОПРОС 2) Кажется (так оно и есть наверное) цикл можно было написать человеческий, типо обратиться к первым детям, а не проверять... МБ что-то путаю или недопонимаю, можете подсказать?( Заранее Спасибо!!! |
ОТВЕТ 1) К тому моменту, когда вызывается функция, назначенная onclick, переменная i всегда равна e.childNodes.length
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="id4">
<div class="class1">1</div>
<div class="class1">2</div>
<div class="class1">3</div>
</div>
<script>
var e = document.getElementById("id4");
for(var i = 0; i < e.childNodes.length; i++){
if(e.childNodes[i].nodeType == 1){
e.childNodes[i].onclick = (function(el) {
return function() {
el.innerHTML += " *";
//alert("работает !!!");
};
})(e.childNodes[i]);
}
}
</script>
<style>body{font-size:300%;}.class1{background:gold;margin:1em auto;padding:1em;text-align:center;cursor:pointer;}</style>
</body>
</html>
ОТВЕТ 2) Человеческий цикл очень субъективен!!!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="id4">
<div class="class1">1</div>
<div class="class1">2</div>
<div class="class1">3</div>
</div>
<script>
document.getElementById("id4").addEventListener("click", function(event) {
if(!event.target.matches(".class1")) return;
event.target.textContent += " *";
});
</script>
<style>body{font-size:300%;}.class1{background:gold;margin:1em auto;padding:1em;text-align:center;cursor:pointer;}</style>
</body>
</html>
P. S. Ещё можно так
for(let element of document.querySelectorAll("#id4 .class1")) {}
|
Цитата:
можно так this.innerHTML = "white"; можно так #коллекции-не-массивы [].forEach.call можно так замыкания |
Блин, точно.. только сделал чтобы он выводил номер свой , разобрался в замыкании! а вот что оно тут вылезет, даже не подумал. Спасибо всем))
|
| Часовой пояс GMT +3, время: 14:18. |