美文网首页
老司机Studio 第六章

老司机Studio 第六章

作者: cenkai88 | 来源:发表于2017-09-19 20:33 被阅读6次

// 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页面

相关文章

  • 老司机Studio 第六章

    // demo1 // demo2 // demo3 jquery jquery简单来讲就是一系列原生接口的封装,...

  • Android Studio导入Module步骤

    Android Studio导入Module(老司机忽略):首先:File----New----Import Mo...

  • 老司机Studio课程大纲

    1 前端开发中的基本概念2 CSS3 基本特性3 CSS3 进阶特性4 原生JavaScript5 JQuery的...

  • 老司机Studio 第二章

    CSS3的基本特性 一切的基础:选择器 基本选择器:div (选中所有div标签).test (class="te...

  • 老司机Studio 第五章

    高级函数 sort函数 filter函数 作用域 在JavaScript中,我们可以将作用域定义为一套规则,这套规...

  • APK Signature Scheme v2

    背景知识 老司机要开车了,你准备好了吗?Android Studio 2.2 最近发布了许多新增功能和改进功能(详...

  • 老司机带老司机

    现在工作不好找,特别是我这个70后,年龄问题成了我应聘的弊端。 年前考交通运输上岗证的同学群因为过年加疫情,沉默好...

  • 老司机Studio 第一章

    前端开发中的基本概念 前端开发者可以做什么 后台管理系统 移动端SPA H5宣传页 微信小程序 node.js(后...

  • 老司机Studio 第三章

    CSS3的进阶特性 verticle-align垂直对齐方式只对容器内的inline-block元素起作用:图片,...

  • 老司机Studio 第四章

    Javascript初步 Javascript基本概念 Javascript 是 ECMAScript标准的一种实...

网友评论

      本文标题:老司机Studio 第六章

      本文链接:https://www.haomeiwen.com/subject/lrtgsxtx.html