转载自网络
我第一次看到样式表切换器是在A List Apart或者Simple Bits,那是两个设计师最应该去的网站。
从那以后,我找到了很多可以让访客通过鼠标点击某个地方切换样式表的方法。但最近我要写一篇如何 使用jQuery编写简单代码实现它的教程。
我将向你们逐步解说整个的过程,不仅仅因为要展示jQuery代码的简介,同时也要揭示jQuery库中的若干高级特性。
首先,代码
$(document).ready(function()
{
$('.styleswitch').click(function()
{
switchStylestyle(this.getAttribute("rel"));
return false;
});
var c = readCookie('style');
if (c) switchStylestyle(c);
});
function switchStylestyle(styleName)
{
$('link[@rel*=style]').each(function(i)
{
this.disabled = true;
if (this.getAttribute('title') == styleName) this.disabled = false;
});
createCookie('style', styleName, 365);
}
$(document).ready(function()
{
$(‘.styleswitch’).click(function()
{
switchStylestyle(this.getAttribute("rel"));
return false;
});
var c = readCookie(’style’);
if (c) switchStylestyle(c);
});
function switchStylestyle(styleName)
{
$(‘link[@rel*=style]’).each(function(i)
{
this.disabled = true;
if (this.getAttribute(‘title’) == styleName) this.disabled = false;
});
createCookie(’style’, styleName, 365);
}
其他这里没有提到的部分是你将在后面看到的创建和读取cookie的函数。
熟悉的开篇
$(document).ready(function()
{
$('.styleswitch').click(function()
告诉jQuery“以最快的速度查找所有包含对象名‘styleswitch’的元素,并在他们被鼠标点击时执行一个函数”。
看起来不错。当鼠标点击预先指定的元素时,switchStylestyle函数将被调用。从现在开始是重点。
这句话什么意思?
第一次看到这句代码的时候我的脑子有些卡壳:
$('link[@rel*=style]').each(function(i) {
在互联网上搜索了一下后我空手而归。最后不得不找到了jQuery的作者John Resig,向他咨询。
他直接给了我一个jQuery网站的页面地址,里面讲解了若干jQuery提供的高级特性(xpath),可以用来查找并操作页面中的若干元素。
如果你看过这些东西你就能明白上面那句神秘的代码的含义是告诉jQuery“查找所有带rel属性并且属性值字符串中包含‘style’的link链接元素”。
嗯?
让我们看看如何编写包含一个主样式表,两个备用样式表的页面:
<link rel="stylesheet" type="text/css" href="styles1.css" title="styles1" media="screen" />
<link rel="alternate stylesheet" type="text/css" href="styles2.css" title="styles2" media="screen" />
<link rel="alternate stylesheet" type="text/css" href="styles3.css" title="styles3" media="screen" />
我们可以看到所有样式表都含有一个包含‘style’字串的rel属性。
所以结果一目了然,jQuery轻松定位了页面中的样式表链接。
下一步?
each()函数将遍历所有这些样式表链接,并执行下一行中的代码:
this.disabled = true;
if (this.getAttribute('title') == styleName) this.disabled = false;
“首先禁用所有的样式表链接,然后开启任何title属性值与switchStylestyle函数传递过来的字串相同的样式表”
一把抓啊,不过很有效。
现在我们需要保证的是那些样式表存在并且有效。
完整代码和演示
既然 Kelvin Luck已经编写了这些代码,我就不在这里重复了。
DEMO
我相信Kelvin的灵感是从 这个网站那里得到的,我们正好可以看看使用其他工具实现这个功能是否要比jQuery更加复杂冗长。
分享到:
相关推荐
在 "15 Days of jQuery (Day 2)" 中,教程展示了如何轻松创建双色表格。传统的 CSS 方法可能需要编写较多的代码,而 jQuery 只需几行就能实现相同的效果。这凸显了 jQuery 在简化任务和提高开发效率方面的价值。 ...
**jQuery计时器插件TimeCircles:丰富的定时与倒计时解决方案** TimeCircles是一款基于jQuery的轻量级插件,它为开发者提供了一种优雅的方式来创建视觉上吸引人的计时器和倒计时器。这个插件以其灵活性、易用性和...
<option value="standard">Standard: 7 day <option value="rush">Rush: 3 days <option value="express">Express: 1 day ``` **4.2 Options** | 序号 | 属性名称 | 属性注解 | | --- | --- | --- | | 1 | ...
endDate: moment().add(6, 'days').startOf('day'), minDate: moment(), maxSpan: { days: 30 }, showDropdowns: true, showWeekNumbers: true, timePicker: false, timePickerIncrement: 1, timePicker12...
在本文中,我们将深入探讨如何使用jQuery实现时间日期三级联动的效果。这个效果通常用于日历选择器或表单中,用户可以选择年、月、日,而下级的选择会根据上一级的选择动态更新。以下是实现这一功能的关键知识点: ...
1. **jQuery**:文件`jquery-1.9.1.min.js`和`jquery-ui.min.js`表明这个项目使用了jQuery库,它是一个广泛使用的JavaScript库,简化了DOM操作、事件处理和Ajax交互。`jquery-ui.min.js`则提供了jQuery UI组件,可能...
{ date: '2022-03-15', title: '会议' }, // 更多事件... ]; var options = { events: events, showAdjacentMonths: true, adjacentDaysChangeMonth: true }; ``` - **创建实例**:使用jQuery选择器找到你要...
<span class="time timeago" title="2021-4-29 15:23"> $(document).ready(function() { $("span.timeago").timeago(); }); ``` #### 代码解析: 1. **HTML结构**: - `<span>`标签包含了要被转换的时间...
<td v-for="day in week.days" :key="day.date"> <!-- 显示日期和签到状态 --> (day)">{{ day.date }} ``` 在JavaScript部分,我们定义Vue组件的选项,包括数据、方法等: ```javascript export ...
jQuery是一个快速、小巧、功能丰富的JavaScript库。它通过减少HTML文档遍历、事件处理、动画和Ajax交互的代码量,使得Web开发变得更加便捷。本文将总结一些在实际应用中常见的jQuery功能片段,并对每个知识点进行...
【JavaScript源代码】jQuery实现可扩展日历 在IT行业中,开发自定义的用户界面组件是一种常见的需求,尤其是在Web开发中。本示例探讨的是如何使用JavaScript和jQuery库创建一个可扩展的日历插件,以满足特定的产品...
days: "%d天", month: "约1个月", months: "%d个月", year: "约1年", years: "%d年", wordSeparator: " ", numbers: [] }; ``` 通过这种方式,timeago.js可以轻松地适应不同语言环境,满足国际化需求。 在...
在本文中,我们将探讨如何使用jQuery来实现一个倒计时功能,显示剩余的天数、小时数、分钟数和秒数。这个功能在各种应用场景中都很常见,例如在线考试、活动截止日期提醒或者产品发布的倒计时等。 首先,我们需要...
'最近7天': [moment().subtract(6, 'days'), moment()], '最近30天': [thirtyDaysAgo, moment()] }, locale: { applyLabel: '确定', cancelLabel: '取消', fromLabel: '起始时间', toLabel: '结束时间', ...
<div class="day-number">{{day}}</div>\ {{#if events.length}}\ <ul class="events">\ {{#each events}}\ <li>{{this.title}}</li>\ {{/each}}\ </ul>\ {{/if}}\ </div>\ {{/each}}\ '; ``` 5. **处理...
- **CSS3**: 层叠样式表,用于定义网页的外观和布局。 - **JavaScript**: 动态脚本语言,用于实现网页的交互功能。 #### 特点: - **易用性**:项目提供了完整的HTML、CSS和JavaScript代码,用户可以通过任意HTML...
'Last 7 Days': [moment().subtract(6, 'days'), moment()], 'Last 30 Days': [moment().subtract(29, 'days'), moment()], 'This Month': [moment().startOf('month'), moment().endOf('month')], 'Last Month'...
day <= days + week * 7; day++) { if (day > days) break; let cell = document.createElement('td'); cell.textContent = day; row.appendChild(cell); } calendarTable.appendChild(row); } // 将...
7. 时间和日期工具推荐:文章最后推荐了一些在线时间及日期计算工具,如在线秒表工具、日期计算器、天数差计算器以及Unix时间戳转换工具等。 8. jQuery相关内容:提供了更多关于jQuery相关技巧的参考资料,如日期与...
'昨天': [moment().subtract('days', 1).startOf('day'), moment().subtract('days', 1).endOf('day')], '最近7日': [moment().subtract('days', 6), moment()], '最近30日': [moment().subtract('days', 29), ...