不确定是否需要灵活处理,或者需要涵盖多少种情况,但是以您的示例为例,如果文本始终位于第一个HTML标记之前–为什么不将内部html拆分为第一个标记并采用前一个标记:
$('#listItem').html().split('<span')[0];
如果您需要更广泛的
$('#listItem').html().split('<')[0];
并且如果您需要两个标记之间的文本(例如在一件事之后但又在另一件事之前),则可以执行(未测试)之类的操作,并使用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...
我通常使实用程序函数用于诸如此类的有用的事情,使它们无错误,然后可靠地频繁使用它们,而不是总是重写这种类型的字符串操作并冒空引用之类的风险。这样,您就可以重新使用该函数在许多项目中,不必浪费时间再调试为什么字符串引用具有未定义的引用错误。可能不是有史以来最短的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)