2012-03-23 67 views
1

我有一個html特殊字符,我想關閉並打開一個複選框。在這種情況下,它是一個明星:☆可以填寫:★。使用jQuery檢查文本是否等於一個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)'); 
    } 
}); 

這並不工作,但因爲$(本)。html的()是永遠不會等於 「&#9733」。我怎麼能重寫這個if語句,我猜解碼html特殊字符,並檢查它的「狀態」?

回答

0

爲了改進SpYk3HH的建議,我將通過在文檔中添加兩顆星來解決這個問題,其中一個使用display:none,並使用jQuery切換它們點擊。

一個額外的好處是,你現在可以用CSS而不是jQuery來單獨調整每個星星,這是應該的。

HTML:

<div class="action_star"> 
    <span class="star1">&#9733;</span> 
    <span style="display:none" class="star2">&#9734;</span> 
</div> 

JS:

$('.action_star').click(function() { 
    $(this).find('.star1,.star2').toggle(); 
}); 

http://jsfiddle.net/cfjT5/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"); 
}) 

See Demo jsFiddle HERE

1

這似乎是工作

escape($(this).html()) == "%u2605" 

其中%u2605是逃脫的充滿星星的符號。

2

而不是使用.html(),使用.text()結合\uxxxx序列或String.fromCharCode()

$(".action_table_star").click(function() { 
    if ($(this).text() == String.fromCharCode(9733)) { 
     $(this).html("&#9734;"); 
     $(this).css('color', 'white'); 
    } else { 
     $(this).html("&#9733;"); 
     $(this).css('color', 'rgb(255,165,0)'); 
    } 
}); 

當使用\uxxxx方法,必須以10爲底的數值則charCode轉換爲基-16之一。示例(在控制檯中):

(9734).toString(16); 
// Returns 2606. Now, paste `"\u2606"` in your code 

不要忘記填充足夠的零以獲得4位數。

+0

這是一個很漂亮的解釋。如果可以的話,我會給1個以上的贊成票。 – Ohgodwhy 2012-03-23 19:00:56

0

沒有,$(this).html()永遠等於&#9733;,但它等於★

http://jsfiddle.net/hJdg4/1/

$(".action_table_star").click(function() { 
    if ($(this).html() == "★") { 
     $(this).html("&#9734;"); 
     $(this).css('color', 'green'); 
    } else { 
     $(this).html("&#9733;"); 
     $(this).css('color', 'rgb(255,165,0)'); 
    } 
}); 
0

你試過$(本)的.text()== '★'

相關問題