Domanda

Il codice HTML qui sotto:

<div id="catestory">

  <div class="content">
     <h2>some title here</h2>
      <p>some content here</p>
  </div>

  <div class="content">
     <h2>some title here</h2>
      <p>some content here</p>
  </div>

  <div class="content">
     <h2>some title here</h2>
      <p>some content here</p>
  </div>

</div>

Quando mouseover il contenuto del div allora è backgroundColor e H2 (all'interno di questo div) cambiamento backgroundColor (proprio come il CSS: hover)

So che questo può usare i CSS (: hover). Per fare questo in browser moderno, ma IE6 does't lavoro

Come utilizzare JavaScript (non jQuery o altro quadro JS) per fare questo?

Modifica: come cambiare la backgroundColor h2 troppo

È stato utile?

Soluzione

var div = document.getElementById( 'div_id' );
div.onmouseover = function() {
  this.style.backgroundColor = 'green';
  var h2s = this.getElementsByTagName( 'h2' );
  h2s[0].style.backgroundColor = 'blue';
};
div.onmouseout = function() {
  this.style.backgroundColor = 'transparent';
  var h2s = this.getElementsByTagName( 'h2' );
  h2s[0].style.backgroundColor = 'transparent';
};

Altri suggerimenti

Aggiunta / stile cambiare degli elementi in codice è una cattiva pratica. Oggi si vuole cambiare lo sfondo color e domani si vorrebbe cambiare sfondo immagine e dopo domani avete deciso che sarebbe stato anche bello cambiare il confine .

Modifica del codice ogni volta solo perché i requisiti di progettazione cambia è un dolore. Inoltre, se il progetto crescerà, cambiando js file saranno ancora più dolore. Più codice, più dolore.

Prova a eliminare l'uso di stili codificati duri, questo vi farà risparmiare tempo e, se lo fai bene, si potrebbe chiedere di fare il compito "cambia-colore" a qualcun altro.

Così, invece di cambiare le proprietà dirette di stile, è possibile aggiungere / rimuovere le classi CSS sui nodi. Nel tuo caso specifico, è solo bisogno di fare questo per nodo padre - "div" e poi, lo stile dei sotto-nodi attraverso i CSS. Quindi non c'è bisogno di applicare proprietà di stile specifico per DIV e H2.

Un altro punto raccomandazione. Cercate di non collegare i nodi hardcoded, ma utilizzare alcuni semantica per farlo. Ad esempio: "Per aggiungere eventi a tutti i nodi che hanno 'contenuto' di classe

.

In conclusione, ecco il codice che vorrei utilizzare per questi compiti:

//for adding a css class
function onOver(node){
   node.className = node.className + ' Hover';
}

//for removing a css class
function onOut(node){
    node.className = node.className.replace('Hover','');
}

function connect(node,event,fnc){
    if(node.addEventListener){
        node.addEventListener(event.substring(2,event.length),function(){
            fnc(node);
        },false);
    }else if(node.attachEvent){
        node.attachEvent(event,function(){
            fnc(node);
        });
    }
}

// run this one when window is loaded
var divs = document.getElementsByTagName("div");
for(var i=0,div;div =divs[i];i++){
    if(div.className.match('content')){
        connect(div,'onmouseover',onOver);
        connect(div,'onmouseout',onOut);
    }
}

E CSS whould essere simile a questo:

.content {
    background-color: blue;
}

.content.Hover{
    background-color: red;
}

.content.Hover h2{
    background-color : yellow;
}

L'accesso l'elemento che si desidera modificare tramite il DOM, ad esempio con document.getElementById() o tramite this nel vostro gestore di eventi, e modificare lo stile in quanto elemento:

document.getElementById("MyHeader").style.backgroundColor='red';

Modifica

È possibile utilizzare getElementsByTagName troppo, (non testata) esempio:

function colorElementAndH2(elem, colorElem, colorH2) {
    // change element background color
    elem.style.backgroundColor = colorElem;
    // color first contained h2
    var h2s = elem.getElementsByTagName("h2");
    if (h2s.length > 0)
    {
        hs2[0].style.backgroundColor = colorH2;
    }
}

// add event handlers when complete document has been loaded
window.onload = function() {
    // add to _all_ divs (not sure if this is what you want though)
    var elems = document.getElementsByTagName("div");
    for(i = 0; i < elems.length; ++i)
    {
        elems[i].onmouseover = function() { colorElementAndH2(this, 'red', 'blue'); }
        elems[i].onmouseout = function() { colorElementAndH2(this, 'transparent', 'transparent'); }
    }
}
<script type="text/javascript">
 function enter(elem){
     elem.style.backgroundColor = '#FF0000';
 }

 function leave(elem){
     elem.style.backgroundColor = '#FFFFFF';
 }
</script>
 <div onmouseover="enter(this)" onmouseout="leave(this)">
       Some Text
 </div>

Questo potrebbe essere un po 'strano perché io non sono davvero un programmatore serio e sto scoprendo cose nella programmazione del modo in cui la penicillina è stata inventata - puro caso. Così come cambiare un elemento al passaggio del mouse? Utilizzare l'attributo :hover proprio come con elementi a.

Esempio:

div.classname:hover
{
    background-color: black;
}

Questo cambia ogni div con il classname classe per avere uno sfondo nero su mousover. Si può sostanzialmente modificare qualsiasi attributo. Testato in IE e Firefox

programmazione Felice!

Se si è disposti a inserire i nodi non semantici nel documento, si può fare questo in un modo compatibile con IE CSS-only avvolgendo il div in falsi tag A.

<style type="text/css">
  .content {
    background: #ccc;
  }

  .fakeLink { /* This is to make the link not look like one */
    cursor: default;
    text-decoration: none;
    color: #000;
  }

  a.fakeLink:hover .content {
    background: #000;
    color: #fff;
  }

</style>
<div id="catestory">

  <a href="#" onclick="return false();" class="fakeLink">
    <div class="content">
      <h2>some title here</h2>
      <p>some content here</p>
    </div>
  </a>

  <a href="#" onclick="return false();" class="fakeLink">
    <div class="content">
      <h2>some title here</h2>
      <p>some content here</p>
    </div>
  </a>

  <a href="#" onclick="return false();" class="fakeLink">
    <div class="content">
      <h2>some title here</h2>
      <p>some content here</p>
    </div>
  </a>

</div>

Per fare questo senza jQuery o qualsiasi altra libreria, è necessario collegare gli eventi onMouseOver e onMouseOut ad ogni div e modificare lo stile dei gestori di eventi.

Ad esempio:

var category = document.getElementById("catestory");
for (var child = category.firstChild; child != null; child = child.nextSibling) {
    if (child.nodeType == 1 && child.className == "content") {
        child.onmouseover = function() {
            this.style.backgroundColor = "#FF0000";
        }

        child.onmouseout = function() {
            // Set to transparent to let the original background show through.
            this.style.backgroundColor = "transparent"; 
        }
    }
}

Se il H2 non hanno inserito il proprio sfondo, lo sfondo div mostrerà attraverso e colorarlo troppo.

Si può provare questo script. :)

    <html>
    <head>
    <title>Div BG color</title>
    <script type="text/javascript">
    function Off(idecko)
    {
    document.getElementById(idecko).style.background="rgba(0,0,0,0)"; <!--- Default --->
    }
    function cOn(idecko)
    {
    document.getElementById(idecko).style.background="rgb(0,60,255)"; <!--- New content color --->
    }
    function hOn(idecko)
    {
    document.getElementById(idecko).style.background="rgb(60,255,0)"; <!--- New h2 color --->
    }
    </script>
    </head>
    <body>

    <div id="catestory">

        <div class="content" id="myid1" onmouseover="cOn('myid1'); hOn('h21')" onmouseout="Off('myid1'); Off('h21')">
          <h2 id="h21">some title here</h2>
          <p>some content here</p>
        </div>

        <div class="content" id="myid2" onmouseover="cOn('myid2'); hOn('h22')" onmouseout="Off('myid2'); Off('h22')">
          <h2 id="h22">some title here</h2>
          <p>some content here</p>
        </div>

        <div class="content" id="myid3" onmouseover="cOn('myid3'); hOn('h23')" onmouseout="Off('myid3'); Off('h23')">
          <h2 id="h23">some title here</h2>
          <p>some content here</p>
        </div>

    </div>

    </body>
<html>

E 'molto semplice, basta utilizzare una funzione su JavaScript e chiamarla onclick

   <script type="text/javascript">
            function change()
            {
            document.getElementById("catestory").style.backgroundColor="#666666";
            }
            </script>

    <a href="#" onclick="change()">Change Bacckground Color</a>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top