2017-04-10 4 views
1

J'ai un <ul> avec des nombres inconnus d'<li> éléments à l'intérieur. Tous les éléments <li> peuvent avoir ou non un élément $('p.have') avec du texte. Je veux recevoir un texte de tous les éléments $('p.have') et s'il n'y a pas $('p.have') nous avons reçu une chaîne vide. exemple possible de <ul>:TypeError non saisi: textLocation [p] .find n'est pas une fonction

<ul> 
     <li> 
      <p class="have">Text from first</p> 
     </li> 
     <li> 
      <p class="have">Text from second</p> 
     </li> 
     <li> 
      <p class="notHave">Not our text</p> 
     </li> 
     <li> 
      <p class="have">Text from fourth</p> 
     </li> 
     <li> 
      <p class="have">Text from five</p> 
     </li> 
    </ul> 

Resul: 'Texte de premier', 'Texte de seconde', '', 'Texte de quatrième'

J'utilise script suivant:

var textLocation = $('ul li'); 
var mytext = []; 
function findText(){ 
    for (var p = 0 ; p < textLocation.length; p++) { 
     if(textLocation[p].find('p.have')) { 
      mytext.push($(this).text()); 
     } else { mytext.push(' ');} 
    } 


} 

findText(); 
console.log(mytext); 

mais je reçois l'erreur suivante

Quelqu'un peut-il me aider à résoudre le problème

+1

quelle est la valeur de 'textLocation'? Comment avez-vous initialisé cette valeur? – gurvinder372

+0

Bonjour, je vous remercie pour votre question. J'ai édité ma question s'il vous plaît jeter un oeil – AllexF

Répondre

1

I want to receive a text from every $('p.have') elements and if there is no $('p.have') we have receive an empty string.

Essayez cette approche simple

var mytext = []; 
$('ul li').each(function(){ 
    if ($(this).find("p.have").length > 0) 
    { 
    mytext.push($(this).find("p.have").text()); 
    } 
    else 
    { 
    mytext.push($(this).find("p.notHave").text()); 
    } 
}); 
+0

Cela devrait être la bonne réponse, car les autres ne recherchent pas le 'p' spécifiquement sous les éléments de la liste. Alors que se passe-t-il si vous avez d'autres paragraphes en dehors de ceux-ci? – RecencyEffect

+0

ça marche pour moi, merci – AllexF

0

utiliser, essayez d'utiliser forEach sur la matrice de l'élément,

<!DOCTYPE html> 
<html> 

<head> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script> 
    <title></title> 
</head> 

<body> 
<ul> 
     <li> 
      <p class="have">Text from first</p> 
      <!-- <p class="notHave"></p> --> 
     </li> 
     <li> 
      <p class="have">Text from second</p> 
      <!-- <p class="notHave"></p> --> 
     </li> 
     <li> 
      <!-- <p class="have"></p> --> 
      <p class="notHave">Not our text</p> 
     </li> 
     <li> 
      <p class="have">Text from fourth</p> 
      <!-- <p class="notHave"></p> --> 
     </li> 
     <li> 
      <p class="have">Text from five</p> 
      <!-- <p class="notHave"></p> --> 
     </li> 
    </ul> 
</body> 
<script> 
function findText(){ 
var string = ""; 
$.each($('p.have'),function(index,ele){ 
    string += $(ele).html() + ","; 
}) 
console.log(string.slice(0,-1)) 
} 
findText(); 
</script> 

</html> 
+0

Salut, merci de votre réponse. Je reçois le même résultat [link] (http://prntscr.com/euzi9v) – AllexF

+0

jetez un oeil je l'ai essayé avec $ .each, ressemble à javascript donnant l'erreur –

0

Mise à jour 2: (Cochez cette nouvelle mise à jour) :)
Jetez un oeil à cela :)
Vous n'avez pas défini textLocation regardez mon code d'où vous avez obtenu textLocation[p].find is not a function là.

function findText(){ 
 
    var textLocation = document.getElementsByTagName("p"); 
 
    for(var i = 0; i < textLocation.length; i++){ 
 
    //do something to each div like 
 
    if(textLocation[i].classList.contains("have")) 
 
    { 
 
     console.log(textLocation[i].innerHTML); 
 
    }else if(textLocation[i].classList.contains("notHave")){ 
 
     console.log(''); 
 
    } 
 
     
 
    } 
 
    
 
}   
 
findText();
<ul> 
 
     <li> 
 
      <p class="have">Text from first</p> 
 
      <!-- <p class="notHave"></p> --> 
 
     </li> 
 
     <li> 
 
      <p class="have">Text from second</p> 
 
      <!-- <p class="notHave"></p> --> 
 
     </li> 
 
     <li> 
 
      <!-- <p class="have"></p> --> 
 
      <p class="notHave">Not our text</p> 
 
     </li> 
 
     <li> 
 
      <p class="have">Text from fourth</p> 
 
      <!-- <p class="notHave"></p> --> 
 
     </li> 
 
     <li> 
 
      <p class="have">Text from five</p> 
 
      <!-- <p class="notHave"></p> --> 
 
     </li> 
 
     
 
     
 
    </ul>

+0

Salut merci pour la réponse. Désolé, j'oublie vraiment de spécifier textLocation ici mais je l'ai dans mon script. Dans votre fonction nous recevons "Not our text" comme 3ème paramètre. Mais nous devons recevoir une chaîne vide. En tout cas merci pour votre réponse. J'ai compris comment spécifier ma question) – AllexF

+0

Salut, heureux que vous ayez compris. Vérifiez la nouvelle mise à jour que j'ai créée. Cela va résoudre votre prolem. –