2012-04-12 11 views
1

Ich benutze diesen JavaScript-Code, um alle DIVs auszuwählen und ihre Farbe zu ändern. Ich möchte nicht die Farbe des DIV in der Kopfzeile ändern. Zweck dieser Aufgabe ist HTML5, DOM, Javascript und getElementsByTagName Funktion zu lernen:Wie wählt man alle Div aus Körper und nicht aus der Kopfzeile?

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"/> 
    <title>test</title> 
    <div>divv in header</div> 
</head> 
<body onload="Onload()"> 
    <div>bla</div> 
    <div id="Div1">bla</div> 
    <div id="Div2">bla 
     <div id="Div4">div in div</div> 
    </div> 
    <div id="Div3" class="diiiivvv">bla</div> 
</body> 
</html> 

<script type="text/javascript"> 
    function Onload() { 
     var h = document.head; 
     var dh = h.getElementsByTagName('div'); 
     if (dh.length != 0) { 
      dh[0].style.backgroundColor = 'red'; //fail 
     }    

     var d = document.getElementsByTagName('div'); 

     for (var i = 0; i < d.length; i++) { 
      d[i].style.backgroundColor = 'blue'; 
     }; 
    } 
</script> 
+6

Warum ist ein DIV im Kopf? – Delta

+2

Div-Elemente sind im Kopf nicht erlaubt. Ihr Browser führt wahrscheinlich eine Fehlerkorrektur durch und verschiebt sie zum Anfang des Körpers. – RobG

+0

Ich denke, Sie sind durch HTML5 neue

Element verwirrt - das ist ** nicht ** das gleiche wie das Element! –

Antwort

0

Wo ist dein Problem? Sie haben es nur Recht, die div in den Kopf zu wählen:

var h = document.head; 
    var dh = h.getElementsByTagName('div'); 
    // or short: 
    var dh = document.head.getElementsByTagName('div'); 

Also, warum Sie nicht das gleiche für das Körperelement verwenden:

var db = document.body.getElementsByTagName('div'); 

Die getElementsByTagName() Verfahren kann auf jedem dom Element angewendet werden .

+0

'head' ist keine Standardeigenschaft von' document'-Objekten bis HTML5, daher wird sie von vielen Browsern nicht unterstützt. – RobG

+0

Wirklich? Gut zu wissen. Aber irrelevant hier, OP wollte document.body. – Bergi

+0

Es ist relevant, weil es in Ihrer Antwort ist. – RobG

0

Sie finden es möglicherweise am besten, mit einem CSS-Selektor und der entsprechenden Stilregel auf die erforderlichen Elemente zuzugreifen. Hier ein Beispiel:

<script type="text/javascript"> 

function applyRule(selectorText, value) { 

    // Get the style sheets - note sytleSheets is a live HTMLCollection 
    var sheet, sheets = document.styleSheets; 

    // Add a style sheet if there isn't one in the document 
    if (!sheets.length) { 
    sheet = document.createElement('style'); 
    sheet.type = 'text/css'; 
    document.getElementsByTagName('head')[0].appendChild(sheet); 
    } 

    // Get the last style sheet 
    sheet = sheets[sheets.length - 1]; 

    // Add the rule - W3C model 
    if (sheet.insertRule) { 
    sheet.insertRule(selectorText + ' {' + value + '}', sheet.cssRules.length); 

    // IE model 
    } else if (sheet.addRule) { 
    sheet.addRule(selectorText, value, sheet.rules.length); 
    } 
} 
</script> 

<div>here is a div 
<button onclick="applyRule('div','background-color: red')">Change div background colour</button> 
</div> 
Verwandte Themen