Ne kadar esnek veya kaç vakayı kapsaması gerektiğinden emin değilsiniz, ancak örneğin, metin her zaman ilk HTML etiketlerinden önce geliyorsa - neden sadece iç etiketi HTML'yi ilk etikete bölemeyip ilkini almıyorsunuz:
$('#listItem').html().split('<span')[0];
ve eğer ihtiyacınız varsa daha geniş olabilir
$('#listItem').html().split('<')[0];
ve iki işaret arasındaki metne ihtiyacınız varsa, bir şeyden sonra ama bir şeyden önce olduğu gibi, (denenmemiş) gibi bir şey yapabilir ve if ifadelerini başlangıç veya bitiş işaretleyicisine veya her ikisine birden sahip olacak kadar esnek kılmak için kullanabilirsiniz. :
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...
Genellikle bu tür yararlı şeyler için yardımcı işlevler yapar, onları hatasız hale getirir ve daha sonra her zaman bu tür dize manipülasyonunu yeniden yazmak ve null referansları riske atmak yerine sık sık onlara güvenirim. Bu şekilde, işlevi yeniden kullanabilirsiniz. ve bir dizge başvurusunun neden tanımlanmamış bir referans hatası olduğunu hata ayıklayarak yeniden zaman kaybetmek zorunda kalmazsınız. Şimdiye kadarki en kısa 1 satır kodu olmayabilir, ancak yardımcı program işlevine sahip olduktan sonra, o andan itibaren bir satırdır. Kodun çoğunun, hataları önlemek için sadece orada olan veya olmayan parametreleri ele aldığını unutmayın :)
Örneğin:
/**
* 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)