我的问题是为什么短语是红色的。应该只是>
之后的单词。正则表达式是正确的(here)
$(".some").html(function (i, text) {
return text.replace(/([^>]*)$/, function (match) {
return '<span class="red">' + match + '</span>';
});
});
.red {
color:#ff0000
}
<div class="some">RAW MATERIALS & CHEMICALS>Earth & Stone</div>
答案 0 :(得分:4)
text
有特殊字符html编码,因此您应该寻找>
。
http://jsfiddle.net/trevordixon/Z4cMN/10/
$(".some").html(function (i, text) {
return text.replace(/>(.*)$/, function (match, title) {
return '><span class="red">' + title + '</span>';
});
});
答案 1 :(得分:3)
似乎HTML &
和>
已转义。在将字符传递给regEx之前尝试取消字符。
$(".some").html(function (i, text) {
return htmlDecode(text).replace(/([^>]*)$/, function (match) {
return '<span class="red">' + match + '</span>';
});
function htmlDecode(input) {
var e = document.createElement('div');
e.innerHTML = input;
return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}
});
答案 2 :(得分:2)
还有另一种方法可以做到比正则表达式更好一点。它正在利用DOM的强大功能:因此它是浏览器自身理解网页的方式。
var textnode = $(".some").contents().last().get(0), // get the last node in .some
last = textnode.splitText(textnode.data.lastIndexOf('>') + 1); // split it after the last >
$(last).wrap('<span class="red"/>'); // wrap the newly-created node in a span
请注意,这允许我们以更直观的方式使用文本数据,而不是担心HTML编码。