让我们从简单的开始:
你的问题:
$('.showtext').text($('.hiddentext').first('td:first').text());
你在说,抓住所有.hiddentext
,选择第一个有一个td
......女巫不是你在代码中拥有的,你有,包含隐藏文本的td......所以,反过来。
您要做的只是获取当前的 NEXT td 并获取 hiddentext,因此,只需更改为:
$('.showtext').text($nextCol.find('.hiddentext').text());
现在,你能看到<br/>
没有正确渲染吗?那是因为你正在设置text
属性,你应该设置html
属性。
最终的代码应该是这样的:
$('.showtext').html($nextCol.find('.hiddentext').html());
现场示例:http: //jsfiddle.net/qKj6b/8/
你的代码:
每次你需要有占位符来为上下文提供一些数据时,请不要使用 HTML TAGS 来保存这些值并隐藏它们......利用data-
属性,女巫是 HTML5 兼容,并且在任何浏览器,即使它不支持 HTML5,例如 IE6。
您的表定义 ( td
) 目前是:
<td class="visible" id="r2">
<span class="hiddentext">Race 2<br />Santa Fe 12:00</span>
<strong><a href="#" title="Race number 1">R2</a></strong>
</td>
应该是这样的:
<td class="visible" id="r2" data-text="Race 2<br />Santa Fe 12:00">
<a href="#" title="Race number 1">R2</a>
</td>
女巫更容易阅读,从你的javascript代码中,你可以很容易地得到这个:
var hiddenText = $nextCol.data("text");
您的代码(第 2 部分):
这个很容易知道
每次你重复自己,你都做错了
您拥有 Next 和 Prev 的方法几乎完全相同,因此,您正在重复所有内容,为此,您应该重构代码并仅使用一种简单的方法,这样,将来的任何更改都只会发生在一个地方,并且只有地方。
$(".next").click(function(e){
e.preventDefault();
var $nextCol = $('.highlighted').next('td');
MoveCursor($nextCol, 'next');
});
$(".previous").click(function(e){
e.preventDefault();
var $prevCol = $('.highlighted').prev('td');
MoveCursor($prevCol, 'prev');
});
function MoveCursor(col, side) {
var maxCol = 8;
if((side === 'next' && col.length != 0) ||
(side == 'prev' && col.length != 0 && col.index() >= maxCol)) {
$('.highlighted').removeClass("highlighted");
col.addClass("highlighted");
// show current title
$('.showtext').html(col.data('text'));
if (col.hasClass("invisible")) {
col.removeClass("invisible");
col.addClass("visible");
var $toRem;
if(side == 'prev')
$toRem = col.next('td').next('td').next('td').next('td').next('td').next('td');
else
$toRem = $nextCol.prev('td').prev('td').prev('td').prev('td').prev('td').prev('td');
$toRem.removeClass("visible");
$toRem.addClass("invisible");
}
}
}
现场示例:http: //jsfiddle.net/qKj6b/22/