カバーする必要のある柔軟性やケースの数はわかりませんが、例として、テキストが常に最初のHTMLタグの前にある場合は、最初のタグで内部のhtmlを分割して、前者を取得するのはどうでしょうか。
$('#listItem').html().split('<span')[0];
必要に応じてもっと広くする必要があるかもしれません
$('#listItem').html().split('<')[0];
そして、2つのマーカーの間のテキストが必要な場合(ある事後の後など)、null refエラーを回避しながら、(テストされていない)のようなことを行い、ifステートメントを使用して、開始マーカーまたは終了マーカーまたはその両方を持つのに十分な柔軟性を持たせることができます:
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...
私は通常、このような便利なことのためにユーティリティ関数を作成し、エラーをなくしてから、このタイプの文字列操作を常に書き換えたり、null参照を危険にさらしたりするのではなく、一度確実にそれらに依存します。このようにして、関数を再利用できます。多くのプロジェクトで、文字列参照に未定義の参照エラーがある理由をデバッグするために時間を無駄にする必要はありません。これまでで最短の1行のコードではないかもしれませんが、ユーティリティ関数を使用した後は、それ以降は1行になります。ほとんどのコードは、エラーを回避するために存在するパラメータを処理するだけであることに注意してください。
例えば:
/**
* 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)