I would like to append a div
only if it's not already there. I am trying with this but it doesn't work:
$('#method_id').on('change', function (e) {
if ($(this).find("option:selected").data('method-column-id') != 1) {
if ($('#column_message').next('div').length)
$('#column_message')
.append('<div id="warning_message" class="alert alert-danger"><strong>Warning!</strong> Installed column and method do not match</div>');
} else {
$('.form-group').find('#column_message>.alert').remove();
}
});
And if I remove the second if-clause, it gets appended every time I select an option which passes first if-clause
Here is the HTML
<!-- Warning message -->
<div class="form-group">
<label for="group" class="col-md-2 control-label"></label>
<div id="column_message" class="col-md-6">
</div>
</div>
In order to check if an element exists, you need to find a selector that matches only that element and check if the length of the jQuery object is equal to 0 or not, like so:
if ($('#unique-selector').length === 0) {
// code to run if it isn't there
}
else {
// code to run if it is there
}
As you are appending div with id, you could just search if that div exists by calling :
if($("#warning_message").length > 0 ){
$('.form-group').find('#column_message>.alert').remove();
}else{
$('#column_message').append('<div id="warning_message" class="alert alert-danger"><strong>Warning!</strong> Installed column and method do not match</div>');
}
But if you would like to have more divs of alert, you could just search for class "alert" or so.
Another way without id ( probably better ) would be to use children() method
the inner if should be if ($('#column_message').next('div').length===0)
or if(!$('#column_message').next('div').length)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With