jQuery

jQuery 是 Javascript 的一个库,官方网站是 jQuery

jQuery 的好处:

  • 兼容性好
  • API 友好
  • 需要兼容多款浏览器

什么时候用 jQuery

  • DOM 操作较多
  • 简单的AJXA
  • 需要兼容多款浏览器

什么时候不用 jQuery

  • 页面交互加大
  • 页面对流量有苛刻的要求
  • 团队已经有 jQuery 代替品

jQuery 版本问题

1.x 和 2.x问题,1.x兼容性更好,2.x性能更好,兼容性相对较差。

jQuery 的两种API

$.noConflict()
$.each()
$('ul').addClass();
$('p').text('h1')

jQuery 选择器

引入 jQuery

<script src="//code.jquery.com/jquery-2.1.1.min.js"></script>

常见的 jQuery 选择器,与 CSS3 选择器类似

  • 基本选择器
    $('*') 匹配所有元素
    $('#id') 匹配 id 选择器
    $('.class') 匹配类选择器
    $('element') 匹配元素选择器

  • .eq
    指定 index 的 jQuery 对象

$('div').eq(2)  // index 为 2 的 div 元素
  • .next / .prev
    前一个或者下一个元素
$('.panel').next()  // 第一个类名为 panel 的下一个元素
$('.panel').prev()  // 第一个类名为 panel 的上一个元素
  • .nextAll / .prevAll
    nextAll获得每个匹配元素集合中每个元素所有后面的同辈元素,选择性筛选的选择器,prevAll与之相反,获取元素前面的同辈元素
$('.panel').nextAll()  // 类名为 panel 的所有后面的同辈元素
$('.panel').prevAll()  // 类名为 panel 的所有前面的同辈元素
  • .siblings
    获得匹配元素中的所有兄弟元素,可以二次筛选
$('.panel').siblings('.active')  // 类名为 panel 的兄弟元素中类名为 active 的元素
  • .parent / .parents
    取得匹配元素集合中,每个元素的父元素,可以提供一个可选的选择器;
    获得集合中每个匹配元素的祖先元素,可以提供一个可选的选择器作为参数
$('li.item').parent()  // li 元素中类名为 item 的元素的父元素
$('li.item').parents()  // li 元素中类名为 item 的元素的所有祖先元素
  • .children / .find
    获得匹配元素集合中每个元素的子元素,选择器选择性筛选
    查找符合选择器的后代元素
$('ul.level-2').children()  // 类名为 level-2 的 ul 元素的子元素
$('ul').find('li.current');  // ul 元素后代中类名为 current 的 li 元素
  • .filter
    筛选当前结果集中符合条件的对象,参数可以是一个选择器或者一个函数
$('div.tab').fliter('.active')  //  类名为 tab 的 div 元素中具有 active 类的元素

.has
筛选匹配元素集合中的那些有相匹配的选择器或DOM元素的后代元素

$('.content').has('.active')  // 类名为 content 的元素中具有 active 类的元素
  • .is
    判断当前匹配的元素集合中的元素,是否为一个选择器,DOM元素,或者jQuery对象,如果这些元素至少一个匹配给定的参数,那么返回true
if ( $target.is("li") ) {
  $target.css("background-color", "red");
}  // 如果选择的 target 对象是 li 元素,则修改 CSS。

用jQuery实现一个 tab 切换

首先画四个 tab ,分别是 1,2,3,4.每个对应一个 panel,one,two,three, four,点击不同的tab时,tab会有被点击的反馈,相应的英文单词也会改变。

html , CSS 如下

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Tab change</title>
  <style>
    .clear:after {
      content:'';
      clear:both;
      display:block;
    }
    .tab {
      float:left;
      background: #ccc;
      padding: 5px 30px;
      border-left:1px solid #aaa;  
      border-top:1px solid #aaa;
    }
    .tab:last-child {
      border-right:1px solid #aaa;
    }
    .tab:hover {
      cursor: pointer;
    }
    .header .active {
      background: #fff;
    }
    .content {
      margin-bottom: 50px;
    }
    .panel {
      display: none;
      width:70%;
      border:1px #ccc solid;
      background: #fff;
      padding: 50px 20px;
    }
    .panel.active {
      display: block;
    }
  </style>
</head>
<body>
  <div class="mod-tab">
    <div class="header clear">
      <div class="tab active">1</div>
      <div class="tab">2</div>
      <div class="tab">3</div>
      <div class="tab">4</div>
    </div>
    
    <div class="content">
      <div class="panel active">one</div>
      <div class="panel">two</div>
      <div class="panel">three</div>
      <div class="panel">four</div>
    </div>
  </div>
  <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
</body>
</html>

jQuery 如下

$('.mod-tab .tab').on('click', function() {
  // tab change
  $(this).siblings().removeClass('active');
  $(this).addClass('active');
  
  // panel change 
  $(this).parents('.mod-tab').find('.panel')
         .eq($(this).index()).addClass('active')
          .siblings().removeClass('active');
});

原生 JS 如下

document.querySelector('.header').addEventListener('click', function(e){
  var tabItem = document.querySelector('.active');
  var contentItem = document.querySelector('.content');
  var currentIndex = 0;

  // tab change
  if(tabItem.classList.contains('tab')){
    tabItem.classList.remove('active');
    e.target.classList.add('active');
  }

  // panel change
  if(e.target.classList.contains('tab')){
    for(var i=0;i<this.children.length;i++){
      if(this.children[i] === e.target)
        currentIndex = i;
    }
    document.querySelectorAll('.active')[1].classList.remove('active');
    contentItem.children[currentIndex].classList.add('active');
 }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • 一、样式篇 第1章 初识jQuery (1)环境搭建 进入官方网站获取最新的版本 http://jquery.co...
    凛0_0阅读 3,380评论 0 44
  • 第一章 jQuery简介 1-1 jQuery简介 1.简介 2.优势 3.特性与工具方法 1-2 环境搭建 进入...
    mo默22阅读 1,583评论 0 11
  • jQuery基础(一)——样式篇 1-2环境搭建 1-3 jQuery HelloWorld体验 $(docume...
    croyance0601阅读 1,081评论 0 8
  • 环境搭建 进入官方网站获取最新的版本 http://jquery.com/download/ ,这里需要注意 j...
    阿r阿r阅读 799评论 0 7
  • DOM创建节点及节点属性 通过JavaScript可以很方便的获取DOM节点,从而进行一系列的DOM操作。但实际上...
    阿r阿r阅读 1,013评论 0 9