Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if element has HTML in it before removing? jQuery

in a function I need to check if a (div, span, p) contains any .html elements in it before attempting to remove the html and add in new content.

Not sure how to do this...

I tried this, but not working:

// 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();
    }

Full function

// 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;
    });

}
like image 214
Leon Gaban Avatar asked Apr 05 '13 02:04

Leon Gaban


3 Answers

Check the children length.

if($('.'+rowName+' div').children().length > 0)
like image 59
msapkal Avatar answered Sep 29 '22 03:09

msapkal


html is a method not a property, you need to use (), then you can use length property of String object for checking the length of the returned html string:

if ( $.trim( $('.'+rowName+' div').html() ).length ) {
    // $('.'+rowName).find('div, p, span').remove();
    $('.'+rowName).find('div, p, span').empty();
}

Note that if you want to change the HTML content of an element, there is no need to remove the current html content of it. html method overrides the current html content.

like image 29
undefined Avatar answered Sep 29 '22 04:09

undefined


You can use .html() for this (and accounting for whitespace):

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

if (!$row.find('div').html().trim().length) {
    $row.find('div, span, p').empty();
}
like image 20
jmar777 Avatar answered Sep 29 '22 02:09

jmar777