2013-04-05 10 views
8

in einer Funktion muss ich prüfen, ob ein (div, span, p) enthält alle HTML-Elemente in es vor dem Versuch, den HTML-Code zu entfernen und neuen Inhalt hinzufügen.Wie überprüft man, ob das Element HTML enthält, bevor es entfernt wird? jQuery

nicht sicher, wie dies zu tun ...

Ich habe versucht, dies aber nicht funktioniert:

// HERE below I tried to do a check to see if the div's have HTML, but did not work 
    if ($('.'+rowName+' div').html) { 
     $('.'+rowName+' div').html.remove(); 
     $('.'+rowName+' span').html.remove(); 
     $('.'+rowName+' p').html.remove(); 
    } 

Volle Funktion

// Create the Role/Fan rows 
function rowMaker (rowName, roleName) { 
    //alert(rowName+' '+roleName); 

    // HERE below I tried to do a check to see if the div's have HTML, but did not work 
    if ($('.'+rowName+' div').html) { 
     $('.'+rowName+' div').html.remove(); 
     $('.'+rowName+' span').html.remove(); 
     $('.'+rowName+' p').html.remove(); 
    } 

    // Blue button 
    $('.'+rowName+' div').append(roleName); 
    $('.'+rowName+' div').attr('id', 'blue-fan-'+roleName); 
    var blueButton = ('blue-fan-'+roleName); 
    console.log('blueButton = '+blueButton); 

    // Genres 
    $('.'+rowName+' span').append(roleType); 

    // Tags 
    $.each(role_Actor, function(index, item) { 
     $('.'+rowName+' p').append(item+', '); 
    }); 

    $('#'+blueButton).click(function() { 

     console.log('clicked blue button'); 

     // clears the role_Actor to be used to recapture checkboxes 
     role_Actor = []; 

     console.log('role_Actor = '+role_Actor); 

     //$('#modal-'+roleId).modal(); 
     $('#modal-'+roleId).modal({persist:true}); 
     return false; 
    }); 

} 
+0

Ist es wirklich wichtig, ob das Element HTML enthält, wenn Sie es nur entfernen möchten? Warum ersetzen Sie den Inhalt nicht einfach komplett mit ['.html'] (http://api.jquery.com/html)? –

+0

Oh, weil irgendwas der Benutzer wird diese Taste drücken, starten Sie die Funktion und die blaue Taste wurde noch nicht erstellt ... so gibt es keine .html zu entfernen und wirft und Fehler auf der Konsole :(vielleicht statt zu entfernen Gibt es eine Art klarer Anruf, den ich machen kann? hmm, der jetzt schaut –

Antwort

12

html ist eine Methode, nicht eine Eigenschaft, Sie müssen () verwenden, dann können Sie length Eigenschaft des String-Objekts für die Überprüfung der Länge der zurückgegebenen HTML-Zeichenfolge verwenden:

Wenn Sie den HTML-Inhalt eines Elements ändern möchten, müssen Sie den aktuellen HTML-Inhalt nicht entfernen. html Methode überschreibt den aktuellen HTML-Inhalt.

5

Überprüfen Sie die Kinderlänge.

if($('.'+rowName+' div').children().length > 0) 
+1

'.children()' wird Textknoten nicht zurückgeben. – jmar777

+1

@ jmar777 ... Ich bin ziemlich sicher, dass das der Punkt ist. –

1

Versuchen

if ($('.'+rowName+' div').html().length > 0) { 
     $('.'+rowName+' div').empty(); 
     $('.'+rowName+' span').empty(); 
     $('.'+rowName+' p').empty(); 
} 
2

Sie .html() für diese (und Bilanzierung von Leerzeichen) verwenden können:

var $row = $('.rowName'); 

if (!$row.find('div').html().trim().length) { 
    $row.find('div, span, p').empty(); 
} 
0

Plain Vanilla JavaScript sollte auch den Trick.

if(document.querySelectorAll('.'+rowName+' div')[0].childElementCount > 0){ 
    console.log("found"); 
} 
Verwandte Themen