Bonjour,
comment vérifier s'il vous plait qu'une balise est vide en jquery
si <p id="confirm_popup"></p> => vide
ou <p id="confirm_popup">votre message a été envoyé</p> => pas vide.
je veux tester afin d'afficher une boite de dialogue.
merci
Version imprimable
Bonjour,
comment vérifier s'il vous plait qu'une balise est vide en jquery
si <p id="confirm_popup"></p> => vide
ou <p id="confirm_popup">votre message a été envoyé</p> => pas vide.
je veux tester afin d'afficher une boite de dialogue.
merci
Bonjour,
ouCode:$('p#confirm_popup').text().length = 0 //alors c'est vide
Bien cordialement,Code:$('p#confirm_popup:empty').length != 0 //alors c'est vide
innerHTML text n'est pas crossbrowser
Merci à vous. j'ai utilisé ta première solution Mahefasoaµ.
a+
:roll:
donc en gros si on te donne le choix entre une voiture avec un volant et une autre sans volant tu prends celle sans le volant ...
Au moins t'es sur de te payer un mur ... :ccool:
oui don cplutot .html() que .text() ... enfin tout dépend de ce que l'on entend par vide ...
Bonsoir
text() : http://api.jquery.com/text/
Les différences, retours à la ligne et espaces blancs sont généralement entre les mots.Citation:
Unlike the .html() method, .text() can be used in both XML and HTML documents. The result of the .text() method is a string containing the combined text of all matched elements. (Due to variations in the HTML parsers in different browsers, the text returned may vary in newlines and other white space.)
Je crois donc queest une solution valable ou mieux pour éliminer d'éventuels espaces blancs avant ou après le texte :Code:$('p#confirm_popup').text().length
Code:$.trim($('p#confirm_popup').text()).length
salut à tous,
permettez que je pinaille un peu: ^^
:arrow:
vu que c'est un id et à moins d'avoir une raison particulière :Citation:
$('p#confirm_popup').text().length
me parait plus approprié.Code:$('#confirm_popup').text().length
:arrow:
pour ce qui est de la notion de vide effectivement tout dépend de ce qu'on entend par 'vide':
-avec .text().length: (soit: le contenu texte hors balises)
renvoie : 0, même si la balise n'existe pas.Code:<p id="confirm_popup"><span></span></p>
remarque: '<' => 1 caractère
-avec .html().length: (soit: le contenu texte brut avec balises)
renvoie : 13, mais si la balise n'existe pas : arrêt du code.Code:<p id="confirm_popup"><span></span></p>
-et si effectivement une chaine d'espaces à le sens de vide un trim() est approprié.
:arrow:
je propose autrement:
qui renvoie 0 uniquement s'il n'y a rien dans la balise, il faut toutefois aussi être sûr de l'existence de celle-ci.Code:$('#confirm_popup').contents().length
;)
Bonsoir
Pour l'id, vous avez raison, le p est inutile.
Pour contents (http://api.jquery.com/contents/), je ne suis pas d'accord.
contents() est l'équivalent de children() (http://api.jquery.com/children/) les commentaires en plus.Citation:
Get the children of each element in the set of matched elements, including text and comment nodes.
bonsoir danielhagnoul,
pourquoi pas... mais je ne comprends pas l'argumentation, cela m'intéresse d'avoir plus de précision.Citation:
je ne suis pas d'accord
je vois surtout l'avantage qu'il permet de comptabiliser le contenu et à la différence de .children() aussi les chaines textes, ce qui me semble bien répondre à la question puisqu'il est nul uniquement s'il n'y a rien entre les balises.
je ne vois donc pas ce qui a de contrariant dans ce choix. :koi:
Bonsoir
Il suffit de lire la documentation, ou de faire un petit test :
Code:
1
2
3
4
5 <p id="confirm_popup_1"></p> <p id="confirm_popup_2"><!-- Un commentaire --></p> <p id="confirm_popup_3"> Bonjour ! <span style="color:red;">Hello everybody !</span> </p>
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 $(function(){ /* * i = 0 $(item).text().length = 0 * i = 0 $(item).contents().length = 0 * i = 1 $(item).text().length = 0 * i = 1 $(item).contents().length = 1 * i = 2 $(item).text().length = 36 * i = 2 $(item).contents().length = 3 */ $("[id^='confirm_popup_']").each(function(i, item){ console.log("i = " + i, "$(item).text().length = " + $(item).text().length); console.log("i = " + i, "$(item).contents().length = " + $(item).contents().length); }); });
bonsoir danielhagnoul,
merci pour l'exemple. je te rassure, je lis les docs et je poste rarement sans vérifier surtout quand je ne maitrise pas un sujet. ;)Citation:
Envoyé par danielhagnoul
ton exemple illustre bien mon propos: contents().length est égale à zéro uniquement lorsqu'il n'y a pas de contenu ce qui n'est pas le cas de text().length. cela me parait bien répondre à la question:
alors permet moi d'insister: quel pb vois tu à ce choix?Citation:
Envoyé par mino26tz
en revanche je constate que ces méthodes échouent pitoyablement s'il y a des balises qui ne sont pas 'inline' comme <h1> <p> <div> <center>...
Le problème, l'un compte les pommes et l'autre compte les poires. ;)
Code:
1
2
3
4
5
6
7 <p id="confirm_popup_1"> </p> <p id="confirm_popup_2"><br/></p> <p id="confirm_popup_3"> <span></span> </p>
Le sujet est clos en ce qui me concerne.Code:
1
2
3
4
5
6
7
8
9
10
11 /* * i = 0 $.trim($(item).text()).length = 0 * i = 0 $(item).contents().length = 1 * i = 1 $.trim($(item).text()).length = 0 * i = 1 $(item).contents().length = 1 * i = 2 $.trim($(item).text()).length = 0 * i = 2 $(item).contents().length = 3 */ $("[id^='confirm_popup_']").each(function(i, item){ console.log("i = " + i, "$.trim($(item).text()).length = " + $.trim($(item).text()).length); console.log("i = " + i, "$(item).contents().length = " + $(item).contents().length); });
on est bien d'accord là dessus mais ca peut aussi être des oranges ou bananes, la question est de savoir s'il n'y a rien, pas s'il y a qqc. ;pCitation:
Envoyé par danielhagnoul
aussi pour moi. à chacun d'apprécier la pertinence du choix.Citation:
Envoyé par danielhagnoul
pour clore je rappellerais que ces solutions ne sont pas valables s'il y a des balises qui ne sont pas 'inline'.
;)