获取页面所有元素并添加样式的控制台调试语句。

[].forEach.call($$("*"),function(a){
  a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)
})

尝试在你浏览器的Console(F12)中运行一下,你会发现页面被不同的颜色块高亮了,这个方法非常简单,但是你自己写的话可能产生非常多的代码,让我们来研究一下它是怎么实现的。

一 选择一个页面上的所有元素

我们首先需要选择页面上的所有元素。这里使用了只能在console调试工具中使用的$$函数,你可以在console中输入$$(‘a‘)自己试一下。它会返回当前页面的所有anchor(链接)元素。

$$与document.querySelectorAll是等价的。所以$$(‘*‘)与 document.querySelectorAll(‘*‘)是等价的,document.all 其实也能选取选用元素,而且兼容所有主流浏览器。。

二 遍历所有的元素

现在我们有了一个所有元素的节点列表(NodeList),现在我们想遍历它们,并给他们加上有颜色的边框。

[].forEach.call( $$(‘*‘), function( element ) { /*  code here */ });

涉及知识:类数组对象和数组有什么区别

常见的类数组对象有两种:arguments 和 nodeList。
典型的类数组对象:

var arrayLike = {‘0‘: ‘a‘, ‘1‘: ‘b‘, ‘2‘: ‘c‘, length:3};

类数组对象和数组的区别:

1.数组自动更新 length 属性
2.数组设置一个较小的 length 值,将截断数组
3.数组从 Array.prototype 继承了一些方法
4.数组的类型为 Array,类数组对象的类型为 Object

如何判断一个变量是 Array 类型
[] instanceof Array; // true;

var arr = [];
arr.constructor === Array; // true;

Object.prototype.toString.call([]) === "[object Array]"; // true

三 改变元素的颜色

让元素有一个漂亮的边框,这行代码使用了CSS的outline属性。有一点你可能不知道,在CSS渲染的盒子模型(Box Model)中,outline并不会改变元素及其布局的位置。因此这比使用border属性要好得多,所以这一部分其实并不难理解:

a.style.outline="1px solid #" + color

怎样定义颜色值其实是比较有意思的

~~(Math.random()*(1<<24))).toString(16)

这里涉及位运算,我们想构造的其实是一个16进制的颜色值,像白色FFFFFF,蓝色0000FF等等。

可以使用数字类型的toString方法进行十进制到16进制的转换。

其实你可以用它进行任意进制的转换:

(30).toString();   // "30"
(30).toString(10); // "30"
(30).toString(16); // "1e" 16进制
(30).toString(2); // "11110" 二进制
(30).toString(36); // "u" 36 是最大允许的进制

因此16进制中的ffffff其实是 parseInt("ffffff", 16) == 16777215,16777215是2^24 - 1的值

因此左位移操作乖以一个随机数 Math.random()*(1<<24) 可以得到一个0 到 16777216之间的值

但是还不够,Math.random返回的是一个浮点数字,我们只需要整数部,这里使用了“~”操作符(按位取反操作)。

这行代码并不关心正负值。因此通过两次取返就可以得到纯整数部,我们还可以将~~视为parseInt的简写。

时间: 2024-11-12 05:09:33

获取页面所有元素并添加样式的控制台调试语句。的相关文章

js及jquery获取页面和元素的宽高

js: 网页可见区域宽: document.body.clientWidth;(不含滚动条) 网页可见区域高: document.body.clientHeight;(不含滚动条) 网页可见区域宽: document.body.offsetWidth;(包括边线的宽); 网页可见区域高: document.body.offsetHeight;(包括边线的宽); 网页正文全文宽: document.body.scrollWidth; 网页正文全文高: document.body.scrollHei

获取 页面、元素、窗口和返回页面、元素、窗口的宽高

jquery如何获取元素的滚动高度 获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width(); 浏览器当前窗口文档body的高度: $(document.body).height();浏览器当前窗口文档body的宽度: $(document.body).width();获

iframe 子页面获取父页面的元素并且控制样式

父页面的代码 <div id="div5" style="position:relative;height:500px;">                       <iframe scrolling="auto" frameborder="0"  id="content" name="content" src ="./cpcia_gonggao.jsp&

无法获取页面标签元素

报错如下: 原因:有多个 name="roleNumber" 的 <input> 标签 解决办法: 给 <input>标签 添加 id 属性 原文地址:https://www.cnblogs.com/daikiti/p/8971378.html

jq获取第一个子元素并添加class

<div class="main"> <div class="tit">颜色</div> <ul> <li>银色</li> <li>深灰色</li> </ul> <div class="tit">内存</div> <ul> <li>64GB</li> <li>128GB

JS获取页面数据执行Ajax请求

下面这个例子展示了如何使用js获取页面中元素的值,并且将这些值作为参数执行Ajax请求. $("#submit-task").bind("click", function (event) { event.preventDefault(); event.stopPropagation(); if(validate() == false){ exit; } var submitBtn = this; // 禁止提交按钮 $(submitBtn).attr('disabl

jQuery基础学习5——JavaScript方法获取页面中的元素

给网页中的所有<p>元素添加onclick事件 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head>

getBoundingClientRect()来获取页面元素的位置”

getBoundingClientRect()来获取页面元素的位置” 获取的是一个对象; 延伸阅读; https://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=403029188&idx=2&sn=1088e273b855b75815edb2e7977a0513&scene=0&key=710a5d99946419d988a823a3f76c4dabc336d68c1e192697aba3d5cdba0fce0f3d

[转载]用Javascript获取页面元素的位置

原文地址:http://www.ruanyifeng.com/blog/2009/09/find_element_s_position_using_javascript.html 制作网页的过程中,你有时候需要知道某个元素在网页上的确切位置. 下面的教程总结了Javascript在网页定位方面的相关知识. 一.网页的大小和浏览器窗口的大小 首先,要明确两个基本概念. 一张网页的全部面积,就是它的大小.通常情况下,网页的大小由内容和CSS样式表决定. 浏览器窗口的大小,则是指在浏览器窗口中看到的那