Цитата:
В JQ событие вешается тоже не на коллекцию, а на элементы этой коллекции. Так же можно и в ванили делать - цикл по коллекции и parentNode, если сильно нужно. |
function customFunction(eSubButton1){ eSubButton1.parentNode.getElementsByTagName('img')[0].classList.toggle('disNone'); }; function createButton(sId){ eSubButton1 = document.createElement('input'); eSubButton1.id = sId; eSubButton1.type = "button"; eSubButton1.value = "Behind"; eSubButton1.classList.add("ret"); eSubButton1.onclick = function(){ customFunction(eSubButton1); }; return eSubButton1; }; Вот так я показываю/скрываю только последнйи элемент родителя. И не вижу как сделать для каждого: что тут брать в цикл? Я вообще в правильном направлении иду? <div class="toggle"> <img class="screenshot" width="310" height="307" src="../images/clip_image002.gif" alt="schermafdruk"> </div> Каждая кнопка в скрипте становиться следующим потомком div.toggle (в скрипте не показано) |
function createButton(sId){ eSubButton1 = document.createElement('input'); eSubButton1.id = sId; eSubButton1.type = "button"; eSubButton1.value = "Behind"; eSubButton1.classList.add("ret"); eSubButton1.onclick = function(){ document.getElementById(sId).parentNode.getElementsByTagName('img')[0].classList.toggle('disNone'); }; return eSubButton1; }; Это решение с id: сам назначил, сам использовал. А без id как решить эт задачу? |
Faab,
:write: <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css" media="screen"> .disNone { display: none; } </style> <script> window.onload = function(){ function createButton(){ var eSubButton1; eSubButton1 = document.createElement('input'); eSubButton1.type = "button"; eSubButton1.value = "Behind"; return eSubButton1; }; var eArticle, eImages, eImage, sClassList, eSubButton; var eMainButton = document.getElementById('hoofdknop'); var eDivTootgle = document.querySelectorAll('.toggle'); for(i=0; i<eDivTootgle.length; i++){ eSubButton = createButton(); eDivTootgle[i].appendChild(eSubButton); eSubButton.onclick = (function () { var div = eDivTootgle[i], n = 0; return function(){ n ^= 1 div.style.backgroundColor = n ? '#FF0000' : '' } })() }; }; </script> </head> <body> <button id="hoofdknop">Alle schermen verbergen</button> <dd>de Wizard Site definition verschijnt, je beantwoordt een aantal vragen <div class="toggle"><img class="screenshot" width="238" height="222" src="../images/clip_image014.gif" alt="schermafdruk"> </div> </dd> <dt> “Hoe wil u de website noemen?” </dt> <dd>vul in <i> George’s site</i> <div class="toggle"><img class="screenshot" width="310" height="307" src="../images/clip_image002.gif" alt="schermafdruk"> </div> </dd> </body> </html> |
Цитата:
<div id="ein" class="toggle"></div> <div id="zwei" class="toggle"></div> <div id="drei" class="toggle"></div> <script> function createButton(){ var eSubButton1; eSubButton1 = document.createElement('input'); eSubButton1.type = "button"; eSubButton1.value = "Behind"; return eSubButton1; }; var eArticle, eImages, eImage, sClassList, eSubButton; var eDivTootgle = document.querySelectorAll('.toggle'); // toggle for(i=0; i<eDivTootgle.length; i++){ eSubButton = createButton(); eSubButton.onclick = function(i){ return function() { alert(eDivTootgle[i].id);// показать id родителя } }(i); eDivTootgle[i].appendChild(eSubButton); }; </script> |
еще один вариант
<div id="container"> <div class="toggle"></div> <div class="toggle"></div> <div class="toggle"></div> </div> <script> window.onload = function () { var container = document.getElementById('container'), eDivTootgle = container.querySelectorAll('.toggle'), elLength = eDivTootgle.length, i = 0, color; container.onclick = function (event) { event = event || window.event; var e = event.target || event.srcElement; while (e != this) { if (e.tagName == 'INPUT') { color = e.parentNode.style.background; e.parentNode.style.background = color ? '' : 'red'; break; } e = e.parentNode; } }; for (; i < elLength; i++) { eDivTootgle[i].insertAdjacentHTML('afterbegin', '<input type="button" value="Behind"/>'); }; }; </script> |
В разделе ЧаВО нашёл статью про замыкающие функции closure. Прочитав её, я понял почему срабатывал только последний объект.
И теперь форма function(i){...}(i); выглядет не так уж загадочно. Но вопросы остались. Цитата:
Цитата:
Что за форма: eSubButton.onclick = (function (a){...})() Я уже наверное должен знать такое, но не знаю: что значит n ^= 1 Цитата:
|
Цитата:
0 xor 1 = 1 1 xor 1 = 0 Если переводить в if, то: if(n == 1) n = 0; else if(n == 0) n = 1; var n = 0; n ^= 1 alert(n); n ^= 1 alert(n); n ^= 1 alert(n); n ^= 1 alert(n); |
Цитата:
|
Часовой пояс GMT +3, время: 21:14. |