2017-04-10 2 views
1

Ich habe eine <ul> mit unbekannter Anzahl von <li> Elemente im Inneren. Alle <li> Elemente können oder nicht $('p.have') Element mit etwas Text haben. Ich möchte einen Text von jeder $('p.have') Elemente erhalten und wenn es keine $('p.have') gibt, haben wir eine leere Zeichenfolge erhalten. mögliches Beispiel <ul>:Uncaught TypeError: textLocation [p] .find ist keine Funktion

<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: 'Text aus dem ersten', 'Text aus dem zweiten', '', 'Text aus dem vierten'

Ich verwende folgende Skript:

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

aber ich erhalte Fehler folgende

Kann mir jemand helfen, das Problem

+1

was ist der Wert von 'textLocation'? Wie haben Sie diesen Wert initialisiert? – gurvinder372

+0

Hallo, danke für deine Frage. Ich habe meine Frage bearbeitet bitte werfen Sie einen Blick – AllexF

Antwort

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.

diesen einfachen Ansatz Versuchen

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

Dies sollte die richtige Antwort sein, weil die anderen bisher nicht nach dem "p" speziell unter Listenelementen suchen. Was passiert also, wenn Sie andere Absätze als diese haben? – RecencyEffect

+0

es funktioniert für mich, danke – AllexF

0

Verwendung dieses Problem zu lösen, versuchen forEach auf Array von Element zu verwenden,

<!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

Hallo, danke für die Antwort. Ich empfange das gleiche Ergebnis [Link] (http://prntscr.com/euzi9v) – AllexF

+0

haben Sie einen Blick, ich habe es mit $ .Each versuchen, sieht aus wie Javascript geben Fehler –

0

Update 2: (dieses neue Update prüfen) :)
Schau dir das an :)
Du hast das nicht definiert textLocation schau dir meinen Code an, also hast du textLocation[p].find is not a function da.

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

Hallo vielen Dank für die Antwort. Sorry, ich vergesse wirklich, textLocation hier anzugeben, aber ich habe es in meinem Skript. In Ihrer Funktion erhalten wir als dritten Parameter "Nicht unseren Text". Aber wir müssen eine leere Zeichenfolge erhalten. Irgendwie vielen Dank für Ihre Antwort. Ich habe verstanden, wie ich meine Frage spezifizieren kann) – AllexF

+0

Hallo, ich bin froh, dass du verstanden hast. Überprüfen Sie das neue Update, das ich erstellt habe. Dies wird dein Prolem lösen. –

Verwandte Themen