Tidak yakin seberapa fleksibel atau berapa banyak kasus yang Anda butuhkan untuk dicakup, tetapi sebagai contoh, jika teks selalu muncul sebelum tag HTML pertama - mengapa tidak hanya membagi html bagian dalam pada tag pertama dan mengambil yang pertama:
$('#listItem').html().split('<span')[0];
dan jika Anda membutuhkannya lebih luas mungkin saja
$('#listItem').html().split('<')[0];
dan jika Anda memerlukan teks di antara dua penanda, seperti setelah satu hal tetapi sebelum yang lain, Anda dapat melakukan sesuatu seperti (belum diuji) dan menggunakan pernyataan jika membuatnya cukup fleksibel untuk memiliki penanda awal atau akhir atau keduanya, sambil menghindari kesalahan ref nol :
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...
Saya biasanya membuat fungsi utilitas untuk hal-hal berguna seperti ini, menjadikannya bebas kesalahan, dan kemudian mengandalkannya sesekali solid, daripada selalu menulis ulang jenis manipulasi string dan mempertaruhkan referensi nol dll. Dengan begitu, Anda dapat menggunakan kembali fungsi tersebut dalam banyak proyek dan tidak perlu membuang waktu lagi untuk debugging mengapa referensi string memiliki kesalahan referensi yang tidak ditentukan. Mungkin bukan kode baris 1 terpendek, tetapi setelah Anda memiliki fungsi utilitas, itu adalah satu baris sejak saat itu. Perhatikan sebagian besar kode hanya menangani parameter yang ada atau tidak untuk menghindari kesalahan :)
Sebagai contoh:
/**
* 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)