浏览器前端软相关

window

window对象有innerWidthinnerHeight属性,可以获取浏览器窗口的内部宽度和高度。内部宽高是指除去菜单栏、工具栏、边框等占位元素后,用于显示网页的净宽高。

对应的,还有一个outerWidthouterHeight属性,可以获取浏览器窗口的整个宽高。(包含地址栏,菜单栏,标签栏)

navigator

  • navigator.appName:浏览器名称;
  • navigator.appVersion:浏览器版本;
  • navigator.language:浏览器设置的语言;
  • navigator.platform:操作系统类型;
  • navigator.userAgent:浏览器设定的User-Agent字符串。

navigator的信息可以很容易地被用户修改,不要用这些信息判断浏览器版本适配不同代码;正确的方法是充分利用JavaScript对不存在属性返回undefined的特性,直接用短路运算符||计算;

screen

  • screen.width:屏幕宽度,以像素为单位;
  • screen.height:屏幕高度,以像素为单位;
  • screen.colorDepth:返回颜色位数,如8、16、24。

location

location.protocol; // 'http'
location.host; // 'www.example.com'
location.port; // '8080'
location.pathname; // '/path/index.html'
location.search; // '?a=1&b=2'
location.hash; // 'TOP'

//要加载一个新页面,可以调用location.assign()
if (confirm('重新加载当前页' + location.href + '?')) {
    location.reload();
} else {
    location.assign('/'); // 设置一个新的URL地址
}

  

document

  document对象表示当前页面。由于HTML在浏览器中以DOM形式表示为树形结构,document对象就是整个DOM树的根节点。

  documenttitle属性是从HTML文档中的<title>xxx</title>读取的,但是可以动态改变:

  Cookie安全问题

  document对象还有一个cookie属性,可以获取当前页面的Cookie。

  Cookie是由服务器发送的key-value标示符。因为HTTP协议是无状态的,但是服务器要区分到底是哪个用户发过来的请求,就可以用Cookie来区分。当一个用户成功登录后,服务器发送一个Cookie给浏览器,例如user=ABC123XYZ(加密的字符串)...,此后,浏览器访问该网站时,会在请求头附上这个Cookie,服务器根据Cookie即可区分出用户。

由于JavaScript能读取到页面的Cookie,如果引入的第三方的JavaScript中存在恶意代码,则www.foo.com网站将直接获取到www.example.com网站的用户登录信息。为了解决这个问题,服务器在设置Cookie时可以使用httpOnly,设定了httpOnly的Cookie将不能被JavaScript读取。这个行为由浏览器实现,主流浏览器均支持httpOnly选项,IE从IE6 SP1开始支持。为了确保安全,服务器端在设置Cookie时,应该始终坚持使用httpOnly

  

history

history对象保存了浏览器的历史记录,JavaScript可以调用history对象的back()forward (),相当于用户点击了浏览器的“后退”或“前进”按钮。

这个对象属于历史遗留对象,对于现代Web页面来说,由于大量使用AJAX和页面交互,简单粗暴地调用history.back()可能会让用户感到非常愤怒。

新手开始设计Web页面时喜欢在登录页登录成功时调用history.back(),试图回到登录前的页面。这是一种错误的方法。

任何情况,你都不应该使用history这个对象了。

DOM插入

空的dom,直接innerHTML=“”;

  使用innerHTML一定要注意对字符编码避免XSS攻击;

  innerText不返回隐藏元素的文本,而textContent返回所有文本。另外注意IE<9不支持textContent(两者都自动对字符串进行HTML编码,保证无法设置任何HTML标签)

非空插入最后一个子节点:appendChild();

如果我们要把子节点插入到指定的位置:insertBefore(newDom,childIndexDom);

删除:removeChild

// 拿到待删除节点:
var self = document.getElementById('to-be-removed');
// 拿到父节点:
var parent = self.parentElement;
// 删除:
var removed = parent.removeChild(self);
removed === self; // true

 注意到删除后的节点虽然不在文档树中了,但其实它还在内存中,可以随时再次被添加到别的位置。 

Jquery

直接改变:$().html();

插入:$().append(); 插入

   $().prepend();添加到最前

最后另外注意,如果要添加的DOM节点已经存在于HTML文档中,它会首先从文档移除,然后再添加,也就是说,用append(),你可以移动一个DOM节点。

插入到指定节点:$().after()和$().before();(不同于js的insertBefore的子节点,此处为同级节点)

选择器

js:

document.getElementById('drink-menu');

document.getElementsByTagName('dt');

jquery:

$("parent>child");//直接子节点
$('ul.lang li:first-child'); // 第一个子节点
$('ul.lang li:last-child'); // 最后一个子节点
$('ul.lang li:nth-child(2)'); // 选出第N个元素,N从1开始
$('ul.lang li:nth-child(even)'); // 选出序号为偶数的元素
$('ul.lang li:nth-child(odd)'); // 选出序号为奇数的元素
$('div:visible'); // 所有可见的div
$('div:hidden'); // 所有隐藏的div

  表单选择

  • :input:可以选择<input><textarea><select><button>

  • :file:可以选择<input type="file">,和input[type=file]一样;

  • :checkbox:可以选择复选框,和input[type=checkbox]一样;

  • :radio:可以选择单选框,和input[type=radio]一样;

  • :focus:可以选择当前输入焦点的元素,例如把光标放到一个<input>上,用$('input:focus')就可以选出;

  • :checked:选择当前勾上的单选框和复选框,用这个选择器可以立刻获得用户选择的项目,如$('input[type=radio]:checked')

  • :enabled:可以选择可以正常输入的<input><select> 等,也就是没有灰掉的输入;

  • :disabled:和:enabled正好相反,选择那些不能输入的。

同级元素过滤查找

<!-- HTML结构 -->
<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>


var swift = $('#swift');

swift.next(); // Scheme
swift.next('[name=haskell]'); // 空的jQuery对象,因为Swift的下一个元素Scheme不符合条件[name=haskell]

swift.prev(); // Python
swift.prev('.dy'); // Python,因为Python同时符合过滤器条件.dy


//过滤和函数式编程的map、filter类似,jQuery对象也有类似的方法。
var langs = $('ul.lang li'); // 拿到JavaScript, Python, Swift, Scheme和Haskell
var a = langs.filter('.dy'); // 拿到JavaScript, Python, Scheme
//或者传入函数,函数内部this被绑定为DOM对象,不是jQuery对象
var langs = $('ul.lang li'); // 拿到JavaScript, Python, Swift, Scheme和Haskell
langs.filter(function () {
    return this.innerHTML.indexOf('S') === 0; // 返回S开头的节点
}); // 拿到Swift, Scheme

//map()方法把一个jQuery对象包含的若干DOM节点转化为其他对象:
var langs = $('ul.lang li'); // 拿到JavaScript, Python, Swift, Scheme和Haskell
var arr = langs.map(function () {
    return this.innerHTML;
}).get(); // 用get()拿到包含string的Array:['JavaScript', 'Python', 'Swift', 'Scheme', 'Haskell']

//一个jQuery对象如果包含了不止一个DOM节点,first()、last()和slice()方法可以返回一个新的jQuery对象,把不需要的DOM节点去掉
var langs = $('ul.lang li'); // 拿到JavaScript, Python, Swift, Scheme和Haskell
var js = langs.first(); // JavaScript,相当于$('ul.lang li:first-child')
var haskell = langs.last(); // Haskell, 相当于$('ul.lang li:last-child')
var sub = langs.slice(2, 4); // Swift, Scheme, 参数和数组的slice()方法一致

  

  事件:

click: 鼠标单击时触发; dblclick:鼠标双击时触发; mouseenter:鼠标进入时触发; mouseleave:鼠标移出时触发; mousemove:鼠标在DOM内部移动时触发; hover:鼠标进入和退出时触发两个函数,相当于mouseenter加上mouseleave

keypress:按一次键后触发。

change:当<input><select><textarea>的内容改变时触发;

ready:当页面被载入并且DOM树完成初始化后触发。ready仅作用于document对象。由于ready事件在DOM完成初始化后触发,且只触发一次,所以非常适合用来写其他的初始化代码。


事件取消绑定
// 10秒钟后解除绑定:
function hello() {
    alert('hello!');
}
a.click(hello); // 绑定事件
a.off('click', hello);//取消绑定


// 绑定事件:
a.click(function () {
    alert('hello!');
});

// 解除绑定:
a.off('click', function () {
    alert('hello!');
});
//这种写法无效这是因为两个匿名函数虽然长得一模一样,但是它们是两个不同的函数对象
//可以使用a.off('click')取消所有的click

$(selector).unbind(event,function)//未传参数的话,会取消绑定所有绑定的事件


//解决某些改变有js程序控制时不能触发事件的情况
var input = $('#test-input');
input.change(function () {
    console.log('changed...');
});
//此时不会触发,我们可以手动调用input.change(); 相当于input.trigger('change'),它是trigger()方法的简写。

//浏览器安全限制在浏览器中,有些JavaScript代码只有在用户触发下才能执行,例如,window.open()函数;放在用户操作的回调函数中是可以运行的

  

  

原文地址:https://www.cnblogs.com/lyfingchow/p/8028129.html