# Checken ob ein Div vorhanden ist



## Kipaboy (8. Januar 2008)

n'abend zusammen,

ich hock hier grad vor meinen Javascript/Ajax code und komm einfach nicht mehr richtig weiter (oder steh total auf em Schlauch)...
Ich möchte prüfen ob ein bestimmtes "<div></div>" schon vorhanden ist oder nicht. Ich könnte zwar das innerhtml des div's auslesen und überprüfen ob dieses leer ist (div noch nicht da also auch noch nichts drin) aber das ist wohl nicht die feine Art. Und über Google und die Forumssuche finde ich auch nichts zu dem Thema.

hoffe auf schnelle Abhilfe,
mfg


----------



## FipsTheThief (8. Januar 2008)

Dazu müsstest Du den DIV Layer den Du suchst auch eindeutig identifizieren können.

Zum Beispiel über die ID oder NAME Attribute. ID wäre einfach bei dem Attribute NAME welcher ja auch nur einmal belegt werden sollte. Geht zwar auch öfters aber er würde weitere Element mit den Attribute NAME dann einfach mal ignorieren , kann man gut bei Formularen testen wo mehere Input Felder oder ähnliche Felder den selben Namen haben.


```
<html>
<head>
<script type="text/javascript">
function ElementExists (htmlObj,search,attrib) { 
     var obj = htmlObj;
     var found = false;
     // suchen wir nach der ID können wir gleich prüfen ob diese existiert
     // und brauchen wir gar nicht erst weiter suchen sofern kein anderes Attribut gesucht wird
     if(document.getElementById(search) && !attrib) return true; 
     
     // erstmal nehmen wir uns das htmlObj zur Brust
     // kann ja sein das man faul ist und nur eine ID übergeben hat 
     // das überprüfen wir erstmal
     if(typeof obj != 'object') {
         if(document.getElementById(htmlObj)) obj = document.getElementById(htmlObj);
         else if (obj.toLowerCase() == 'body') obj = document.getElementsByTagName('BODY')[0];
         else return false;
    }
    
    // nun müssen wir nur noch rausfinden ob das Objekt das wir suchen existiert
    function searchObj (o) {
        for(var i = 0; i < o.childNodes.length;i++) {
             if(o.childNodes[i].nodeName == '#text')
                 continue; // Textknoten brauchen wir nicht
            
            with(o.childNodes[i]) {
                if (getAttribute(attrib) == search) 
                    found = true;
                else 
                    if(childNodes.length > 0) searchObj(o.childNodes[i]);
            }
        }        
        if(found) return true;
    }
    searchObj(obj);
    return found;
}

// erster parameter die ID vom Element das wir durchsuchen oder eben BODY
// zweiter Parameter nach was wir suchen wollen
// dritter Parameter das Attribut falls erwünscht kein Attribut würde die ID suchen
window.onload = function () {
    alert(ElementExists('hannes','paul','manfred')); 
    alert(ElementExists('body','hannes','manfred')); 
}
</script>
</head>
<body>
    <div>
        <div name="paul">
            <div id="hannes">
                <div name="peter">
                    <span manfred="paul"></span>
                </div>
            </div>
        </div>
    </div>
    <div name="peter" manfred="hannes">
    </div>
</body>
```
Edit:
Nachtrag mir fiel dann noch ein das sich das Element ja beliebig tief verschachteln kann , nebenbei noch nen paar Fehler ausgebügelt gleich und naja das Posting unter diesem noch fabriziert habt Mitleid es ist ja noch früh 

Nachtrag 2: 
Ich glaub ich hab es mir ein wenig zu umständlich gemacht:
document.namedeselementes würde ja auch funktionieren , naja gut so können wir das name attribute beliebig oft verwenden halt  
2. wäre noch das wir halt nach anderen Attributen suchen könnten um ein Element zu identifizieren 

Nachtrag 3:

Da du ja den DIV eventuell über Ajax einbindest fliegt einen der W3C ja nicht mehr um die Ohren sobald man andere Attribute benutzt als die erlaubten.  Ich geh einfach mal davon aus das dies der Fall ist darum noch die kleine Änderung ich hatte wohl eindeutig zuviel Kaffee.

*// EDIT*

crap sry da ist mir nen Fehler unterlaufen


----------



## Kipaboy (8. Januar 2008)

Danke für deine Hilfe aber ich stand wohl total auf dem Schlauch... brauche gar nicht so eine komplizierte Lösung.

Kann das auch einfach über eine checkvariable laufen lassen. Aber ist gut zu wissen wie das ganze jetzt einigermassen funktioniert werde mir das auch gleich nochmal genauer anschauen und warscheinlich anderweitig und abgeändert verwenden können..


----------



## FipsTheThief (8. Januar 2008)

Ob du so ne "komplizierte" Variante brauchst glaube ich auch nicht  

Also es würde quasi bei Dir 1 Zeile reichen , suchst Du nach der ID ist es document.getElementById(id) oder ist es der Name reicht es aus zu fragen document.namevomelement.

Das was ich da nun hingekleistert habe kann quasi alles finden also nicht nur DIV Layer. Sei es eine Tabelle , Link, Liste weiß der Geier was mit jedem beliebigen Attribute , wobei mit beliebigen Attributen sollte man schon vorsichtig sein wenn man den HTML Code valide haben will, also sowas nennt man dann wohl mit Kanonen auf Spatzen schießen in deinen Fall  

Das ganze läuft über Rekursion ab , wir nehmen das Grundelement und laufen alle Kinder durch. Sollte das Kind Element nun noch weitere Kindelemente haben ruft sich die Funktion selber noch einmal auf das neue Root Element ist nun aber das Kindelement.Sozusagen gehen wir vom Kind die Kinder auch noch alle durch. Das würde helfen wenn der HTML Code sehr verschachtelt ist. 

Sollte das Element gefunden worden sein wird found auf wahr gesetzt und dann gehts raus.


----------

