一个jQuery对象实际上是包含了一些DOM对象,外加jQuery自己提供了一些方法的集合。
jQuer对象转换成DOM对象 $(window)[0]
querySelector方法返回在DOM树中查找到的匹配参数条件的第一个元素
http简单介绍
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)
HTTP工作原理
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是你也可以改为8080或者其他端口
HTTP三点注意事项:
1.HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。
2.HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。
3. HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。
一个完整的http事务
1)域名解析 -->
2) 发起TCP的3次握手 -->
3) 建立TCP连接后发起http请求 -->
4) 服务器响应http请求,浏览器得到html代码 -->
5)浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) -->
6)浏览器对页面进行渲染呈现给用户 -->
HTTP请求格式主要有四部分组成,分别是:请求行、请求头、空行、消息体,每部分内容占一行。
服务器接收处理完请求后返回一个HTTP相应消息给客户端。HTTP响应消息的格式包括:状态行、响应头、空行、消息体。
<p id="info">Hello</p>
document.getElementById("info").innerHTML="pig"
$("#info").html('余建')
方便DOM的选取和操作,响应用户操作,简化Ajax操作
typeof $("#info") "object"
$("#info") 转化为 $("#info")[0] 等于 $("#info")get(0)
var p=document.getElementById("info") 转化为 $(p)
$ === jQuery 结果为 true
获取选择器
<div class="info">0</div> $('.info:first').text() 0
<div class="info">1</div> $('.info:gt(1)').text() "234"
<div class="info">2</div> $('.info:lt(3)').text() "012"
<div class="info">3</div> $('.info:eq(3)').text() 3
<div class="info">4</div> $('.info:last').text() 4
属性选择器
<a>0</a> $('a[href]') 1 2 3
<a href="/info">1</a> $('a[href="/info"]') 1
<a href="/infomation">2</a> $('a[href$="tion"]') (结尾) 2
<a href="/test">3</a> $('a[href*="info"]').text() (包含) 1 2
<form>
<label>Name:</label>
<input name="name">
<fieldset>
<label>Newsltter:</label>
<input name="firstletter">
<input name="secondletter">
</fieldset>
<input name="none">
</form>
层级选择器
$('form>input')
$('form input')
$('label+input') 相邻
$('label~input') 所有
<div>
<p><span>Hello</span></p>
</div>
<div>Hello again</div>
筛选
$('div:has(span)')
<p id="info">Hello</p>
<style>
.big{
background-color:green;
font-size:30px;
}
</style>
$("#info").attr('class','big')
等价 var p=document.getElementById("info")
p.getAttribute('class') "big"
p.setAttribute('class','')
<div>
<div id="div">我是DIV元素</div>
<p id="p">我是P元素</p>
</div>
$('#div').insertAfter($('#p')) 返回 div 元素(p、div)
$('#div').after($('#p')) 返回 p 元素 (div、p)
元素的操作
$("ul").append("<li>list item</li>")
jQuery事件
$('#info').click(function(){console.log("hello")})
<script>
$('#info').click(function(){
console.log(this.innerHTML);
})
</script>
Hello
<script>
$('#info').click(function(){
console.log($(this));
})
</script>
fn.init [p#info]
0: p#info
length: 1
__proto__: Object(0)
事件绑定
$('#info').bind('click mouseenter',function () { console.log(this);}) 多个事件用空格隔开
解绑
$('#info').unbind('mouseenter')
事件操作 trim(去除字符串首末两端空格)
var arr=[1,2,3,4,1,2];
$.each(arr,function(index,item){
console.log(index+':'+);
})
0:1 1:2 2:3 3:4 4:1 5:2
Ajax跨域问题
使用如下标头可以接受全部网站请求:header('Access-Control-Allow-Origin:*') ;
什么是跨域?
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。
所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子:
http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域)
http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域)
http://abc.123.com/index.html 调用 http://def.123.com/server.php (子域名不同:abc/def,跨域)
http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)
http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域)
请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。
浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。
解决办法:
1、JSONP:
使用方式就不赘述了,但是要注意JSONP只支持GET请求,不支持POST请求。
2、代理:
例如www.123.com/index.html需要调用www.456.com/server.php,可以写一个接口www.123.com/server.php,由这个接口在后端去调用www.456.com/server.php并拿到返回值,然后再返回给index.html,这就是一个代理的模式。相当于绕过了浏览器端,自然就不存在跨域问题。
3、PHP端修改header(XHR2方式)
在php接口脚本中加入以下两句即可:
header('Access-Control-Allow-Origin:*');//允许所有来源访问
header('Access-Control-Allow-Method:POST,GET');//允许访问的方式