a标签的主要作用是用于超链接,可以链接到其他页面也可以链接到本地页面。
例子:访问百度
在所有浏览器中,链接的默认外观如下:
未被访问的链接带有下划线而且是蓝色的
已被访问的链接带有下划线而且是紫色的
活动链接带有下划线而且是红色的
a标签属性
href:url //规定链接的目标URL
download:filename //指定下载链接
例子:
hreflang 属性用于指定被链接文档的语言(该属性只有设置了href属性才能起作用)
type 属性规定目标文档的 MIME 类型(该属性只有设置了href属性才能起作用)
media 属性规定目标 URL 是为什么类型的媒介/设备进行优化的
rel 属性用于指定当前文档与被链接文档的关系
target 属性规定在何处打开链接文档
_blank 在新窗口中打开被链接文档。
_self 默认。在相同的框架中打开被链接文档
_parent 在父框架集中打开被链接文档
a标签与window.open的运用
open() 方法用于打开一个新的浏览器窗口或查找一个已命名的窗口
语法:window.open(URL,name,features,replace)
URL:一个可选的字符串,声明了要在新窗口中显示的文档的 URL
name:一个可选的字符串,该字符串是一个由逗号分隔的特征列表,其中包括数字、字母和下划线,该字符声明了新窗口的名称。
features:一个可选的字符串,声明了新窗口要显示的标准浏览器的特征
replace:一个可选的布尔值。规定了装载到窗口的 URL 是在窗口的浏览历史中创建一个新条目,还是替换浏览历史中的当前条目。支持下面的值:(true - URL 替换浏览历史中的当前条目。false - URL 在浏览历史中创建新的条目)
例子:a标签自动刷新数据显示(该方法可以用于刷新例如“待办事项”等工作需求)
iframe规定一个内联框架,用来在当前 HTML 文档中嵌入另一个文档
iframe常用属性:
1.frameborder:是否显示边框,1(yes),0(no)
2.height:框架作为一个普通元素的高度,建议在使用css设置。
3.width:框架作为一个普通元素的宽度,建议使用css设置。
4.name:框架的名称,window.frames[name]时专用的属性。
5.scrolling:框架的是否滚动。yes,no,auto。
6.src:内框架的地址,可以使页面地址,也可以是图片的地址。
7.srcdoc , 用来替代原来HTML body里面的内容。但是IE不支持, 不过也没什么卵用
8.sandbox: 对iframe进行一些列限制,IE10+支持
(如果跨域顶多只能实现页面跳转window.location.href,不同域父页面没有权限改动子页面,但可以实现页面的跳转)
iframe的缺点
1、页面样式调试麻烦,出现多个滚动条;
2、浏览器的后退按钮失效
3、会增加服务器的HTTP请求(页面请求次数比请求的数据量相比,前者耗时更大)
4、小型的移动设备无法完全显示框架
5、性能问题,iframe的创建比其他DOM元素的创建慢了1-2个数量级
6、不容易打印
7、代码复杂,无法被一些搜索引擎解读
8、阻塞主页面的事件:window的事件是非常重要的,事件触发使浏览器的“忙”指示器停止,告诉用户当前网页已经加载完毕。当事件加载延迟后,给用户的感觉是这个网页非常慢。(解决办法:动态添加src,window的 事件需要在所有iframe加载完毕后(包含里面的元素)才会触发。)
9、浏览器只能开少量的连接到web服务器,而主要页面和其中的iframe是共享这些连接的,这就意味着iframe在加载资源时可能用光了所有的可用连接,从而阻塞了主要面资源的加载。
iframe的优点
1、iframe能够原封不动的把嵌入的网页展现出来
2、如果有多个网页引用iframe,只需修改iframe的内容,就可以实现调用的每一个页面内容的更改。
3、页面如果为了统一风格,头部和版本都是一样的,就可以写成一个页面,用iframe来嵌套,可以增加代码的可重用。
4、如果遇到加载缓慢的第三方内容,可由iframe来解决
5、重载页面时不需要重载整个页面,只需要重载页面中的一个框架页(减少了数据的传输,增加了网页下载速度)
例子:iframe标签与父级互相调用
上述例子中,主要的两个API就是contentWindow,和contentDocument
iframe.contentWindow, 获取iframe的window对象
iframe.contentDocument, 获取iframe的document对象
这两个API只是DOM节点提供的方式(即getELement系列对象)
例子:
var iframe = document.getElementById("iframe1");
var iwindow = iframe.contentWindow;
var idoc = iwindow.document;
console.log("window",iwindow);//获取iframe的window对象
console.log("document",idoc); //获取iframe的document
console.log("html",idoc.documentElement);//获取iframe的html
console.log("head",idoc.head); //获取head
console.log("body",idoc.body); //获取body
结合Name属性,通过window提供的frames获取 window.frames['iframeName']返回的就是window对象
(直接使用iframeName.window.fn 操作)
在iframe中获取父级内容
window.parent 获取上一级的window对象,如果还是iframe则是该iframe的window对象
window.top 获取最顶级容器的window对象,即,就是你打开页面的文档
window.self 返回自身window的引用。可以理解 window===window.self
父页面代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>iframe</title> <style> .testClass1{ width: 100px; height:100px; border: 1px solid black; } .appendTest{ position: absolute; top:50%; left: 50%; opacity: 0.8; width: 100px; height: 100px; margin-top:-50px; margin-left: -50px; background-color: #2aabd2; } </style> </head> <body> <button class="testButtion" id="testButtion" type="button" ="callChild()"> 改变子页面 </button> <button class="testButtion" id="testButtion2" type="button" ="callChild2()"> 改变子页面2 </button><br> <iframe src="20180528-iframeSon.html" id="testIframe1" name="myFrame"></iframe> <div id="testDiv1" class="testClass1"> 我是测试div1 </div> <iframe src="20180528-iframeSon2.html" id="testIframe2" name="myFrame2"></iframe> <div id="testDiv2" class="testClass1"> 我是测试div2 </div> </body> <script> function testParent(){ alert("我是父页面"); }; function callChild(){ myFrame.window.testChild(); } function callChild2(){ var test111 = myFrame2.window.document; console.log(test111); test111.bgColor= "yellow"; } function testIframe(){ var iframeTest1 = document.getElementById("testIframe1"); var iframeWin = iframeTest1.contentWindow; var iframeDoc = iframeWin.document; }; function testChild2(){ alert("测试"); } testIframe(); </script> </html>
子页面1代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>firameSon</title> </head> <body> <button type="button" value="调用父页面中的函数" ="callParent()">调用父级</button> </body> <script> function testChild(){ alert("子页面"); document.body.style.backgroundColor = "yellow"; } function callParent(){ parent.testParent(); var testDivP1 = parent.document.getElementById("testDiv1"); console.log(testDivP1); testDivP1.style.width = "200px"; var testCreat1 = parent.document.createElement("div"); //createElement创建后需要用其他方法插入 parent.document.body.appendChild(testCreat1); testCreat1.setAttribute('class','appendTest'); console.log(testCreat1); } </script> </html>
子页面2代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="js/jquery-3.2.1.js"></script> </head> <body> <button ="callParent()">改变父级背景色</button> </body> <script> function testChild(){ alert("子页面"); document.body.style.backgroundColor = "yellow"; } function callParent(){ parent.testParent(); parent.document.body.style.backgroundColor = "yellow"; } </script> </html>