我在html中得到了以下结构:
<div id="text">
some text
</div>
如果我修剪文本并用以下方法测试:
$("#text").text().trim() === "some text"
它返回false 还
$("#text").text().trim() === "some text"
返回false 但
/^some\s{1}text$/.test($("#text").text().trim())
返回true。 所以请告诉我,这里有什么不对。
正如您所建议的,我使用的是jQuery(1.6)。
答案 0 :(得分:25)
那是因为没有中断空格(charCode 160)并不完全等于空格(charCode 32)
jquery的.text()
将HTML实体编码为其直接unicode等效,因此
变为String.fromCharCode(160)
您可以通过用普通空格替换所有非中断空格来解决它:
d.text().replace(String.fromCharCode(160) /* no breaking space*/,
" " /* ordinary space */) == "some text"
或更好:
d.text().replace(/\s/g /* all kinds of spaces*/,
" " /* ordinary space */) == "some text"
答案 1 :(得分:12)
与空格字符(Unicode U + 0020)不同。它是一个不间断的空格字符,用Unicode编码为U + 00A0。这就是为什么你的第一个测试不匹配,但第三个测试不匹配; \s
匹配所有空白字符。
要么坚持正则表达式测试,要么在同等性检查中使用\u00a0
或\xa0
:
$("#text").text().trim() === "some\xa0text";
$("#text").text().trim() === "some\u00a0text";
答案 2 :(得分:3)
没有考虑不可见的'\ n'。摆脱'\ n'并用'=='检查。
试试这个
var x = $("#text").html();
x = x.replace(/(\r\n|\n|\r)/gm, "");
x = x.replace(/\s+/g, '');
alert(x);
if (x == 'some text') {
alert('true');
}
else {
alert('false');
}
希望这有帮助。
答案 3 :(得分:2)
有几个类似的问题。你可以看看它们。
Matching jquery .text() to nonbreaking space
如前文所述。您可以与“==”而不是“===”进行比较,并使用'\ xa0'来比较
,这是非破坏空间的实际字符。