Sie sind sich nicht sicher, wie flexibel oder wie viele Fälle Sie benötigen, um es abzudecken, aber zum Beispiel, wenn der Text immer vor den ersten HTML-Tags steht - warum nicht einfach das innere HTML beim ersten Tag aufteilen und das erstere nehmen:
$('#listItem').html().split('<span')[0];
und wenn Sie es breiter brauchen, vielleicht nur
$('#listItem').html().split('<')[0];
und wenn Sie den Text zwischen zwei Markierungen benötigen, wie nach einer Sache, aber vor einer anderen, können Sie so etwas wie (ungetestet) tun und if-Anweisungen verwenden, um ihn flexibel genug zu machen, um eine Start- oder Endmarkierung oder beides zu haben, während Null-Ref-Fehler vermieden werden ::
var startMarker = '';// put any starting marker here
var endMarker = '<';// put the end marker here
var myText = String( $('#listItem').html() );
// if the start marker is found, take the string after it
myText = myText.split(startMarker)[1];
// if the end marker is found, take the string before it
myText = myText.split(endMarker)[0];
console.log(myText); // output text between the first occurrence of the markers, assuming both markers exist. If they don't this will throw an error, so some if statements to check params is probably in order...
Im Allgemeinen mache ich Dienstprogrammfunktionen für nützliche Dinge wie diese, mache sie fehlerfrei und verlasse mich dann häufig auf sie, sobald sie fest sind, anstatt diese Art der Zeichenfolgenmanipulation immer neu zu schreiben und Nullreferenzen usw. zu riskieren. Auf diese Weise können Sie die Funktion wiederverwenden in vielen Projekten und müssen nie wieder Zeit damit verschwenden, zu debuggen, warum eine Zeichenfolgenreferenz einen undefinierten Referenzfehler aufweist. Könnte nicht der kürzeste 1-Zeilen-Code aller Zeiten sein, aber nachdem Sie die Utility-Funktion haben, ist es von da an eine Zeile. Beachten Sie, dass der größte Teil des Codes nur Parameter behandelt, die vorhanden sind oder nicht, um Fehler zu vermeiden :)
Zum Beispiel:
/**
* Get the text between two string markers.
**/
function textBetween(__string,__startMark,__endMark){
var hasText = typeof __string !== 'undefined' && __string.length > 0;
if(!hasText) return __string;
var myText = String( __string );
var hasStartMarker = typeof __startMark !== 'undefined' && __startMark.length > 0 && __string.indexOf(__startMark)>=0;
var hasEndMarker = typeof __endMark !== 'undefined' && __endMark.length > 0 && __string.indexOf(__endMark) > 0;
if( hasStartMarker ) myText = myText.split(__startMark)[1];
if( hasEndMarker ) myText = myText.split(__endMark)[0];
return myText;
}
// now with 1 line from now on, and no jquery needed really, but to use your example:
var textWithNoHTML = textBetween( $('#listItem').html(), '', '<'); // should return text before first child HTML tag if the text is on page (use document ready etc)