我有一个html特殊字符,我想像一个复选框一样关闭和打开。在这种情况下,它是一个明星:☆可以填补:★。
我想在点击它时检查星的状态。
$(".action_table_star").click(function() {
if ($(this).html() == "★") {
$(this).html("☆");
$(this).css('color', 'white');
} else {
$(this).html("★");
$(this).css('color', 'rgb(255,165,0)');
}
});
这不起作用,因为$(this).html()永远不会等于“&#9733”。我怎么能重写这个if语句我想解码html特殊字符并检查它的“状态”?
答案 0 :(得分:2)
不要使用.html()
,而是将.text()
与\uxxxx
序列结合使用,或String.fromCharCode()
。
$(".action_table_star").click(function() {
if ($(this).text() == String.fromCharCode(9733)) {
$(this).html("☆");
$(this).css('color', 'white');
} else {
$(this).html("★");
$(this).css('color', 'rgb(255,165,0)');
}
});
使用\uxxxx
方法时,必须将base-10数字字符代码转换为base-16字符。示例(在控制台中):
(9734).toString(16);
// Returns 2606. Now, paste `"\u2606"` in your code
不要忘记填充足够的零以获得4位数。
答案 1 :(得分:1)
我的建议不是依赖于一个角色,而是依次添加和删除一个类,如下所示:
$(".action_table_star").click(function(e) {
if ($(this).hasClass("star-checked")) {
$(this).css('color', 'rgb(255,165,0)').text("☆");
}
else {
$(this).css('color', '#fff').text("★");
};
$(this).toggleClass("star-checked");
})
答案 2 :(得分:1)
这似乎有效
escape($(this).html()) == "%u2605"
其中%u2605
是已填充的星号符号。
答案 3 :(得分:0)
不,$(this).html()
永远不会等于★
,但将等于★
$(".action_table_star").click(function() {
if ($(this).html() == "★") {
$(this).html("☆");
$(this).css('color', 'green');
} else {
$(this).html("★");
$(this).css('color', 'rgb(255,165,0)');
}
});
答案 4 :(得分:0)
你试过$(this).text()=='★'
答案 5 :(得分:0)
改进SpYk3HH的建议,我会通过在文档中添加两个星号来处理此问题,一个使用display:none
,并使用jQuery在点击时切换它们。
另一个好处是,您现在可以使用CSS而不是jQuery单独设置每个星形的样式,这应该是原样。
HTML:
<div class="action_star">
<span class="star1">★</span>
<span style="display:none" class="star2">☆</span>
</div>
JS:
$('.action_star').click(function() {
$(this).find('.star1,.star2').toggle();
});
代码更少,更清晰,更易读,更好。