老司机Studio 第六章

// demo1

function foo() { console.log('function foo') }
var foo = 20;
console.log(foo); // 20

console.log(foo); // function foo
function foo() { console.log('function foo') }
var foo = 20;

//顺序
function foo() { console.log('function foo') } // 先检查函数定义
var foo; // 再检查变量定义,如果存在则跳过
foo = 20;
console.log(foo);

function foo() { console.log('function foo') } // 先检查函数定义
var foo; // 再检查变量定义,如果存在则跳过
console.log(foo);
foo = 20;

// demo2

function test() {
    console.log(a);
    console.log(foo());
    
    var a = 1;
    function foo() {
        return 2;
    }
}
test();

//
function foo() {return 2;}
var a;
console.log(a);
console.log(foo());
a = 1;

// demo3

function test() {
    console.log(foo);
    console.log(bar);
    var foo = 'Hello';
    console.log(foo);
    var bar = function () { // 函数的赋值
        return 'world';
    }

    function foo() { // 函数的声明
        return 'hello';
    }
}
test();

// 
function foo() { return 'hello';} //函数的声明
var foo; // 变量声明
var bar; // 变量声明
console.log(foo);
console.log(bar);
foo = 'Hello';
console.log(foo);
bar = function () {return 'world';}
<html>

<body>
    <p>To do List</p>
    <div>
        <input type="text" name="" id="text" />
        <button onclick="add()">add</button>
        <button onclick="remove()">remove</button>
    </div>
    <div id="list" style="margin-top: 10px;">
        
    </div>
</body>

<script type="text/javascript">
    
    let toDoList = document.getElementById('list')

    function add(){
        let buttonText = document.getElementById('text').value;
        let newItem = document.createElement('div');
        newItem.innerHTML = `<span class="item-content">${buttonText}</span><input type="checkbox" class="item-checkbox"/>`
        toDoList.appendChild(newItem);
    }

    function remove(){
        let allItems = document.querySelectorAll('.item-checkbox');
        let item, toRemove=[];
        for (item of allItems){
            if (item.checked) toDoList.removeChild(item.parentNode);
        }
    }
    
</script>

<style type="text/css">
    .item-content{
        line-height: 1.7;
        border: 1px solid #888;
        padding: 0 10px;
        width: 200px;
        display: inline-block;
        margin-right: 4px;
        margin-bottom: 4px;
    }
</style>
</html>

jquery

jquery简单来讲就是一系列原生接口的封装,它是一个库(library),而非框架(framework)。
jquery的思路和原生思路类似,都是DOM驱动。在使用jquery后原生的语法仍可使用。

最基本的符号就是$,$是一个函数对象。

  • 和CSS3通用的选择器
    $()

  • 表单元素选择
    $(':input') 可以选择<input>,<textarea>,<select>和<button>
    $(':radio') 可以选择单选框,和input[type=radio]一样;
    $(':focus') 可以选择当前输入焦点的元素,例如把光标放到一个<input>上,用$('input:focus')就可以选出;
    $(':enabled') 可以选择可以正常输入的<input>、<select>
    等,也就是没有灰掉的输入;
    $(':disabled') 和:enabled正好相反,选择那些不能输入的。

  • 查找(find)和过滤(filter)

<ul class="lang">
    <li class="js dy">JavaScript</li>
    <li class="dy">Python</li>
    <li id="swift">Swift</li>
    <li class="dy">Scheme</li>
    <li name="haskell">Haskell</li>
</ul>
  • find, parent, next, prev
    在某个节点的所有子节点中查找,使用find()方法,它本身又接收一个任意的选择器。
var ul = $('ul.lang'); // 获得<ul>
var dy = ul.find('.dy'); // 获得JavaScript, Python, Scheme
var swf = ul.find('#swift'); // 获得Swift
var hsk = ul.find('[name=haskell]'); // 获得Haskell
var swf = $('#swift'); // 获得Swift
var parent = swf.parent(); // 获得Swift的上层节点<ul>
var a = swf.parent('div.red'); // 从Swift的父节点开始向上查找,直到找到某个符合条件的节点并返回
var swift = $('#swift');

swift.next(); // Scheme
swift.next('[name=haskell]'); // Haskell,因为Haskell是后续第一个符合选择器条件的节点

swift.prev(); // Python
swift.prev('.js'); // JavaScript,因为JavaScript是往前第一个符合选择器条件的节点
  • filter
var langs = $('ul.lang li'); // 拿到JavaScript, Python, Swift, Scheme和Haskell
var a = langs.filter('.dy'); // 拿到JavaScript, Python, Scheme
  • 操作DOM内容及样式
    除了缩短所写语句外,另一个好处是可以批量修改,不用编码者自己写循环
<ul id="test-ul">
    <li class="js">JavaScript</li>
    <li name="book">Java &amp; JavaScript</li>
</ul>
<script>
// 获取
$('#test-ul li[name=book]').text(); // 'Java & JavaScript'
$('#test-ul li[name=book]').html(); // 'Java &amp; JavaScript'
// 修改
let j1 = $('#test-ul li.js');
let j2 = $('#test-ul li[name=book]');
j1.html('<span style="color: red">JavaScript</span>'); // 注意安全问题
j2.text('JavaScript & ECMAScript');
</script>
// 样式
<ul id="test-css">
    <li class="lang dy"><span>JavaScript</span></li>
    <li class="lang"><span>Java</span></li>
    <li class="lang dy"><span>Python</span></li>
    <li class="lang"><span>Swift</span></li>
    <li class="lang dy"><span>Scheme</span></li>
</ul>
<script>
$('#test-css li.dy>span').css('background-color'); //获取
$('#test-css li.dy>span').css('background-color', '#ffd351').css('color', 'red'); // 批量修改
</script>

$('#test-css li.dy>span').hasClass(); // 是否有class
$('#test-css li.dy>span').addClass(); // 添加class
$('#test-css li.dy>span').removeClass(); // 删除class
$('#test-css li.dy>span').prop(); // 获取或修改特定属性的值
$('#test-css li.dy>span').attr(); // 获取或修改特定属性的值
  • 修改DOM结构
<div id="test-div">
    <ul>
        <li><span>JavaScript</span></li>
        <li><span>Python</span></li>
        <li><span>Swift</span></li>
    </ul>
</div>
<script>
let ul = $('#test-div>ul');
ul.append('<li><span>Haskell</span></li>');
</script>
// 创建DOM对象:
var ps = document.createElement('li');
ps.innerHTML = '<span>Pascal</span>';
// 添加DOM对象:
ul.append(ps);

// 添加jQuery对象:
ul.append($('#scheme'));

// 添加函数对象:
ul.append(function (index, html) {
    return '<li><span>Language - ' + index + '</span></li>';
});

prepend(); //添加到元素下级最前
after(); //添加到元素前
before(); //添加到元素后
remove(); //删除元素
hide(); //隐藏元素
  • 其他函数
    深拷贝:let copied = $.extend(true, {}, toCopy);
y = {a:1};
x =  $.extend(true, {}, y);
x.a =2;
console.log(y);

参考jquery接口:

AJAX

读音:
通过AJAX完成浏览器和远端服务器的数据交流

/* 
$.ajax(url, options, 
@params url: 请求地址
@params options: 配置项 
@params callback: 完成的回调
*/
var jqxhr = $.ajax('/api/categories', {
    dataType: 'json'
}, function(data){
    
);
async:是否异步执行AJAX请求,默认为true;

method:发送的Method,缺省为'GET'(查),可指定为'POST'(改)、'PUT'(增)、'DELETE'(删)等;

contentType:发送POST请求的格式,默认值为'application/x-www-form-urlencoded; charset=UTF-8',也可以指定为text/plain、application/json;

data:发送的数据,可以是字符串、数组或object。如果是GET请求,data将被转换成query附加到URL上,如果是POST请求,根据contentType把data序列化成合适的格式;

headers:发送的额外的HTTP头,必须是一个object;

dataType:接收的数据格式,可以指定为'html'、'xml'、'json'、'text'等,缺省情况下根据响应的Content-Type猜测。

作业:

  1. 用jquery完成上次的to-do list页面
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容

  • 选择器选择器是jQuery的核心。 事件 动画 扩展
    wyude阅读 471评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,642评论 18 139
  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 1,329评论 0 8
  • 第一章 入门 基本功能:访问和操作 dom 元素,控制页面样式,对页面的事件处理,与ajax完美结合,有丰富的插件...
    X_Arts阅读 1,034评论 0 2
  • 可以遇见也是一种幸福吧
    南面一一有南风阅读 103评论 2 0