まず、コメントで指摘したように、配列が満たされていないため、if
ステートメントが不発になっています。それはさておき、クラスの命名システムはそれほど悪くはありませんが (キャメルケースよりもクラス名ではダッシュの方が標準的だと思いますが)、jQuery には重大な競合があります。
あなたの CSS はそのままで問題なく、HTML 構造は恐ろしいものではありません。どちらかを変更することもできますが、Javascript から始めることになると思います。おそらく、すでに多くの HTML と CSS を配置しているでしょう。js はシンプルで簡単な変更です。以下は、それが私に渡された場合、 「私」がそれをどのように書き換えるかです。長いif文を描かずに、あなたが望む効果を達成していると思います。また、 jQuery の .data()メソッドを使用して「元のテキスト」を記録していますが、現時点では使用していません。
$(function() {
// saves "original text" to LI element's data
$('.skillsDouble li').each(function(i) { $(this).data("oText", $.trim($(this).text())); });
// begins "delegating" events to selected elements, in this case, 'mouseenter' to all LI's of .skillsDouble
$(document).on("mouseenter", '.skillsDouble li', function(e) {
// just to make things easy, I grab the stuff we want to work with and make it local variables
var txt = $(this).find('.text'), // our text element
rate = $(this).find('[class*=Star]'), // our ratings element based on any inner element having a class name "containing the phrase 'Star'"
oText = $(this).data("oText"); // our original text, if you still want it for something else
txt.stop().hide(); // hide the text
rate.stop().animate({ // show the stars
left: 400,
opacity: "show"
});
})
.on("mouseleave", '.skillsDouble li', function(e) { // now delegate mouseleave
// same localvariables
var txt = $(this).find('.text'), rate = $(this).find('[class*=Star]'), oText = $(this).data("oText");
rate.stop().hide(); // hide the stars
txt.stop().fadeIn(1000); // show the text
})
})
別の例
- 「フェード」効果の別の使用例も示します