JavaScript相关知识点

来源:互联网 发布:网络教育 考试难度 编辑:程序博客网 时间:2024/06/14 11:17

十条jQuery代码片段助力Web开发

  • 检测IE浏览器
    在进行CSS设计时,IE浏览器对开发者及设计师而言无疑是个麻烦。尽管IE6的黑暗时代已经过去,IE浏览器家族的人气亦在不断下滑,但我们仍然有必要对其进行检测。当然,以下片段亦可用于检测其它浏览器。
$(document).ready(function() {       if (navigator.userAgent.match(/msie/i) ){         alert('I am an old fashioned Internet Explorer');       } }); 
  • 平滑滚动至页面顶部
    以下是jQuery最为常见的一种实现效果:点击一条链接以平滑滚动至页面顶部。虽然没什么新鲜感可言,但每位开发者几乎都用得上。
$("a[href='#top']").click(function() {   $("html, body").animate({ scrollTop: 0 }, "slow");   return false; }); 
  • 保持始终处于顶部
    以下代码片段允许某一元素始终处于页面顶部。可以想见,其非常适合处理导航菜单、工具栏或者其它重要信息。
$(function(){ var $win = $(window) var $nav = $('.mytoolbar'); var navTop = $('.mytoolbar').length && $('.mytoolbar').offset().top; var isFixed=0; processScroll() $win.on('scroll', processScroll) function processScroll() { var i, scrollTop = $win.scrollTop() if (scrollTop >= navTop && !isFixed) { isFixed = 1 $nav.addClass('subnav-fixed') } else if (scrollTop <= navTop && isFixed) { isFixed = 0  $nav.removeClass('subnav-fixed') } }
  • 替换html标签
    jQuery能够非常轻松地实现html标签替换,而这也将为我们带来更多新的可能。
$('li').replaceWith(function(){   return $("<div />").append($(this).contents()); });
  • 检测屏幕宽度
    现在移动设备的人气几乎已经超过了传统计算机,因此对小型屏幕的尺寸进行检测就变得非常重要。幸运的是,我们可以利用jQuery轻松实现这项功能。
var responsive_viewport = $(window).width(); /* if is below 481px */if (responsive_viewport < 481) {     alert('Viewport is smaller than 481px.'); } /* end smallest screen */
  • 自动修复损坏图片
    如果大家的站点非常庞大而且已经上线数年,那么其中或多或少会出现图片损坏的情况。这项功能可以检测损坏图片并根据我们的选择加以替换。
$('img').error(function(){ $(this).attr('src', 'img/broken.png'); });
  • 检测复制、粘贴与剪切操作
    利用jQuery,大家可以非常轻松地检测到选定元素的复制、粘贴与剪切操作。
$("#textA").bind('copy', function() {     $('span').text('copy behaviour detected!') }); $("#textA").bind('paste', function() {     $('span').text('paste behaviour detected!') }); $("#textA").bind('cut', function() {     $('span').text('cut behaviour detected!') });
  • 自动为外部链接添加target=“_blank”属性

在链接至外部站点时,大家可能希望使用target=”blank”属性以确保在新的选项卡中打开页面。问题在于,target=”blank”属性并未经过W3C认证。jQuery能够帮上大忙:以下片段能够检测当前链接是否指向外部,如果是则自动为其添加target=”blank”属性。

var root = location.protocol + '//' + location.host; $('a').not(':contains(root)').click(function(){     this.target = "_blank"; });
  • 悬停时淡入/淡出
    又是另一项“经典”效果,大家可以利用以下片段随时加以运用。
$(document).ready(function(){     $(".thumbs img").fadeTo("slow", 0.6); // This sets the opacity of the thumbs to fade down to 60% when the page loads     $(".thumbs img").hover(function(){         $(this).fadeTo("slow", 1.0); // This should set the opacity to 100% on hover     },function(){         $(this).fadeTo("slow", 0.6); // This should set the opacity back to 60% on mouseout     }); });
  • 禁用文本/密码输入中的空格
    无论是电子邮件、用户名还是密码,很多常见字段都不需要使用空格。以下代码能够轻松禁用选定输入内容中的全部空格。
$('input.nospace').keydown(function(e) { if (e.keyCode == 32) { return false; } });

注意:Jquery中用offset().top和offsetTop的比较
offsetTop:当前对象到其上级层顶部的距离。不能对其进行赋值.设置对象到页面顶部的距离请用style.top属性。
offset().top:指元素与document的上边的距离,而不是浏览器当前窗体的上边缘。
这里写图片描述
这里写图片描述

jquery的$.extend和$.fn.extend作用及区别

jQuery为开发插件提拱了两个方法,分别是:
jQuery.fn.extend();
jQuery.extend();
虽然 javascript 没有明确的类的概念,但是用类来理解它,会更方便。
jQuery便是一个封装得非常好的类,比如我们用 语句 $(“#btn1”) 会生成一个 jQuery类的实例。
jQuery.extend(object);为jQuery类添加类方法,可以理解为添加静态方法。如:
jQuery.extend({
min: function(a, b) { return a < b ? a : b; },
max: function(a, b) { return a > b ? a : b; }
});
jQuery.min(2,3); // 2
jQuery.max(4,5); // 5
jQuery.extend( target, object1, [objectN]) 用一个或多个其他对象来扩展一个对象,返回被扩展的对象。 var settings = { validate: false, limit: 5, name: “foo” }; var options = { validate: true, name: “bar” }; jQuery.extend(settings, options); 结果:settings == { validate: true, limit: 5, name: “bar” }

jQuery.fn.extend(object); 对jQuery.prototype进得扩展,就是为jQuery类添加“成员函数”。jQuery类的实例可以使用这个“成员函数”。
比如我们要开发一个插件,做一个特殊的编辑框,当它被点击时,便alert 当前编辑框里的内容。可以这么做:

$.fn.extend({               alertWhileClick:function() {                       $(this).click(function(){                                   alert($(this).val());                       });                 }       }); // 页面上为:$("#input1") 为一个jQuery实例,当它调用成员方法 //alertWhileClick后,便实现了扩展,每次被点击时它会先弹出目前编辑里的内容。      $("#input1").alertWhileClick(); 

.fnjqueryfnjquery.fn.abc()
那么你可以这样子:$(“#div”).abc(); 通常使用jQuery.extend()方法扩展.

$.fn是什么东西呢。查看jQuery代码,就不难发现。
jQuery.fn = jQuery.prototype = {
   init: function( selector, context ) {//…. 
};
原来 jQuery.fn = jQuery.prototype.对prototype肯定不会陌生啦。

jquery源码分析:http://www.admin10000.com/document/7067.html,看过源码上面的内容就很好理解了。

javascript “||”、“&&”的灵活运用

你是否看到过这样的代码:a=a||”“; 可能javascript初学者会对此感到茫然。今天就跟大家分享一下我的一些心得。 其实:

a=a||”defaultValue”;
与:

if(!a){    a="defaultValue";}

和:

if(a==null||a==""||a==undefined){    a="defaultValue";}

是等价的! 为了弄清这个问题,首先我们必须了解一个问题:javascript中数据类型在转换为bool类型时发生了什么。

在javascript中,数据类型可以分为“真值”和“假值”。顾名思义,真值转换为bool时值为true;假值转换为bool时值为false。下表罗列了一些常见的数据类型转换为bool时的值:

数据类型 转换为bool后的值 undefined false Object true function true 0 false 1 true 0/1之间的数 true 字符串 true “”(空字符串) false

在if表达式中,javascript首先将条件表达式转换为bool类型,表达式为真值则执行if中的逻辑,否则跳过。

于是有了:

if(!a){
a=”defaultValue”;
}
下面我们再来看“&&”、“||”两个表达式。

由于javascript是弱类型语言,所以在javascript中这两个表达式可能跟其他语言(比如java)中不太一样。

在javascript中,“&&”运算符运算法则如下:

如果&&左侧表达式的值为真值,则返回右侧表达式的值;否则返回左侧表达式的值。

这就是说:

var i=”“&&”真值”; //->i=””
i=”真值”&&”其他真值”; //->i=”其他真值”
i=”真值”&&”“; //->i=””
“||”运算符的运算法则如下:

如果||左侧表达式的值为真值,则返回左侧表达式的值;否则返回右侧表达式的值。

这就是说:

var i=”“||”真值”;//->i=”真值”
i=”真值”||”其他真值”;//->i=”真值”
i=”真值”||”“;//->i=”真值”
于是,就可以理解:a=a||”defaultValue”;的逻辑了。如果a为假值(等于null、空字符串……),则将”defaultValue”赋给a;否则将a的值赋给a本身。

0 0
原创粉丝点击