Как правильно реализовать onclick, используя дочерние узлы, чтобы div исчез?

Я задал вопрос вчера, но это было не по теме, и я работал над кодом, чтобы достичь цели, которую я хотел, при наведении, но теперь я хочу, чтобы каждый элемент div, по которому щелкали, становился прозрачным. Проблема, которую я знаю, состоит в том, что я работаю в Dreamweaver вместо phpstorm, и я не уверен, что команда, которую я использовал, действительна. Мой HTML здесь:

<!DOCTYPE html>
<html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="category">

            <div class="content">
            </div>

            <div class="content">
            </div>

            <div class="content">
            </div>

            <div class="content">
            </div>

            <div class="content">
            </div>

        </div>

    <style>
        div { background-color: springgreen; }
        div { width: 100px; }
        div { height: 100px; }
    </style>

</body>
<script src="js/main.js"></script>
</html>

и JavaScript:

/**
* Created by Mark M. on 3/28/2015.
*
*/

 var category = document.getElementById("category");
 for (var child = category.firstChild; child != null; child =    child.nextSibling) {
  if (child.nodeType == 1 && child.className == "content") {
    child.onmouseover = function() {
        this.style.width = "150px";
        this.style.height = "150px"
    };

    child.onmouseout = function() {
        this.style.width = "100px";
        this.style.height = "100px"
    };

    child.onmouseclick= function() {
        //disappear
        this.style.backgroundColor = "transparent";


    }
}}

3 ответа

Решение

Попробуй это:

HTML

<div id="category">
    <div class="content"></div>
    <div class="content"></div>
    <div class="content"></div>
    <div class="content"></div>
    <div class="content"></div>
</div>

JavaScript

var arrContent = document.querySelectorAll("#category div.content");
for(i =0; i< arrContent.length; i++){
    var child = arrContent[i];
    console.log(child)
    if (child.nodeType == 1 ) {
        child.onmouseover = function() {
            this.style.width = "150px";
            this.style.height = "150px"
        };

        child.onmouseout = function() {
            this.style.width = "100px";
            this.style.height = "100px"
        };

        child.onclick= function() {
            this.style.backgroundColor  = "transparent";
        }
    }
}`

StyleSheet

div.content {background-color: springgreen;width: 100px;height: 100px;}

var arrContent = document.querySelectorAll("#category div.content");
for(i =0; i< arrContent.length; i++){
var child = arrContent[i];
console.log(child)
if (child.nodeType == 1 ) {
    child.onmouseover = function() {
        this.style.width = "150px";
        this.style.height = "150px"
    };

    child.onmouseout = function() {
        this.style.width = "100px";
        this.style.height = "100px"
    };

    child.onclick= function() {
        this.style.backgroundColor  = "transparent";
    }
}
}
div.content {background-color: springgreen;width: 100px;height: 100px;}
<div id="category">
<div class="content"></div>
<div class="content"></div>
<div class="content"></div>
<div class="content"></div>
<div class="content"></div>
</div>

Это должно быть элегантным решением для вашего вопроса. Нажмите "Выполнить фрагмент кода", чтобы проверить:

var contentDivs = document.getElementsByClassName('content');

for(var i = 0; i < contentDivs.length; i++) {
    var div = contentDivs[i];
    div.onclick = function(){
        this.style.display = 'none';
    }
}
div {background-color: springgreen; width: 100px; height: 100px;}
<div id="category">
    <div class="content">Content 1</div>
    <div class="content">Content 2</div>
    <div class="content">Content 3</div>
    <div class="content">Content 4</div>
    <div class="content">Content 5</div>
</div>

Проблема в том, что вы используете "onmouseclick" вместо "onclick"

как насчет использования document.getElementsByClassName('content'), а также addEventListener() вместо использования синтаксиса onX. Я считаю, что addEventListener более соответствует стандартам и должен обеспечивать лучшую совместимость с браузерами.

https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName

https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

var content = document.getElementsByClassName('content');
console.log('content found', content);
for (var i = 0; i < content.length; i+=1){
  content[i].addEventListener("click", function(){
    this.style.backgroundColor = "transparent";
  });
}
Другие вопросы по тегам