
1、jquery选择器$('selector')返回的不是数组,而是封装好的jquery对象。但这个对象有一个特别的地方,就是查询到的节点被以下标为属性,添加到了jquery对象上,所以它看起来像数组,因为它存在一些属性是数字;\x0d\\x0d\2、jquery对象有哪些属性和方法?\x0d\我们可以理解,$('selector')返回了一个对象obj,obj[0]obj[i]总是返回查询到的第i个节点。除此之外,jquery对象还被通过prototype添加了一些方法,即:\x0d\jQueryprototypeeach = function(){}\x0d\jQueryprototypehasClass = function(){}\x0d\jQueryprototypehide = function(){}\x0d\jQueryprototypecss = function(){}\x0d\jQueryprototypeattr = function(){}\x0d\等等。这样的话,$('selector')返回的对象就可以调用这些方法,比如objattr('name')、objcss('color', 'red')。\x0d\\x0d\\x0d\3、jquery方法如何处理多个节点?\x0d\实际上,以上诸如hide、css、attr等方法,在jquery内部都是通过循环来处理各个节点的。但是,如果是要获取节点属性,比如objattr('name'),显然这个只能返回一个字符串,所以类似的方法都是获取节点集合中的第一个节点的属性。也就是说,虽然返回的节点很多,但只有第一个会被处理。\x0d\\x0d\4、为什么jquery可以链式调用?\x0d\在jquery中,很多同名的方法通过参数个数的不同实现不同的功能,比如css方法,如果传一个参数则表示获取css属性;如果传两个参数,则表示给节点添加某个属性,并赋值为第二个参数。attr、width等也是这样的处理。对于方法的返回值,除了获取属性值、获取css值等需要返回实际值的方法外,当css方法、attr方法表示为为节点添加属性、css样式时,是不需要返回值的,但jquery让这些方法返回了this,也就是返回了调用者自身,所以可以链式调用。
以你在样式表中的定义的顺序来进行叠加覆盖的。假设你的定义顺序是:
class1{}
class2{}
class3{}
假设这三个类名同时写在一个元素上面<div class="class1 class2 class3"></div>
那么应用样式时,这三个类定义的样式如果有相同的属性定义,那么以class3定义的为准,不同的属性会进行合并。需要注意的是,如果定义样式时,class1或者class2中用了 !important。那么加了!important的类名具有更高的优先级。(并且IE6及更早浏览器下,!important在同一条样式内不生效。)
CSS ,全称叫作Cascading Style Sheets,即 层叠样式表 。“层叠”是指当在HTML中引用了数个样式文件,并且样式发生冲突时,浏览器能依据层叠顺序处理。“样式”指网页中文字大小、颜色、元素间距、排列等格式。HTML定义了网页的结构,但是只有HTML页面的布局并不美观,可能只是简单的节点元素的排列,为了 让网页看起来更好看一些 ,这里借助了CSS。CSS是 目前唯一的网页页面排版样式标准 ,有了它的帮助,页面才会变得更为美观。如下图的右侧,即为CSS。
就局部放大来看,下图所示就是一个CSS样式。 大括号前面 是一个CSS 选择器 ,此选择器的意思是 首先选中 id为head_wrapper且class为s-ps-islite的 节点 ,然后 再选中 其内部的class为s-p-top的 节点 。大括号内部写的就是一条条 样式规则 ,例如 position 指定了这个元素的布局方式为 绝对布局 ,bottom指定元素的 下边距 为40像素,width指定了 宽度 为100%占满父元素,height则指定了元素的 高度 。也就是说,我们将位置、宽度、高度等样式配置统一写成这样的形式,然后用大括号括起来,接着在开头再加上CSS选择器,这就代表 这个样式对CSS选择器选中的元素生效 ,元素就会根据此样式来展示了。在网页中,一般会统一定义整个网页的样式规则,并写入CSS文件中(其后缀为css)。在HTML中,只需要用link标签即可引入写好的CSS文件,这样整个页面就会变得美观、优雅。
在爬虫过程中都需要爬取目标的 节点 ,我们知道网页由一个个 节点 组成, CSS选择器会根据不同的节点 设置不同的样式规则, 那什么是节点 ?又 怎样来定位节点 呢?下面围绕这两个问题进行介绍。
在HTML中,所有 标签定义的内容都是节点 ,它们构成了一个HTML DOM树。我们先看下什么是DOM,DOM是W3C(万维网联盟)的标准,其英文全称Document Object Model,即 文档对象模型 。它定义了访问HTML和XML文档的标准:W3C文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。W3C DOM标准被分为如下3个不同的部分:
核心DOM :针对任何结构化文档的标准模型。
XML DOM :针对XML文档的标准模型。
HTML DOM :针对HTML文档的标准模型。
根据W3C的HTML DOM标准,HTML文档中的所有内容都是节点。 整个文档 是一个文档节点; 每个HTML元素 是元素节点;HTML 元素内的文本 是文本节点;每个HTML 属性 是属性节点; 注释 是注释节点。HTML DOM将HTML文档视作树结构,这种结构被称为节点树,如下图所示。
节点树中的节点 彼此拥有层级关系 。我们常用父(parent)、子(child)和兄弟(sibling)等术语描述这些关系。父节点拥有子节点,同级的子节点被称为兄弟节点。在节点树中, 顶端节点称为根 (root)。除了根节点之外,每个 节点都有父节点 ,同时可拥有任意数量的子节点或兄弟节点。下图展示了节点树以及节点之间的关系。
在CSS中,我们使用 CSS选择器来定位节点 。例如,下图中div节点的id为container,那么就可以表示为#container,其中#开头代表选择id,其后紧跟id的名称。另外,如果我们想选择class为wrapper的节点,便可以使用wrapper,这里以点()开头代表选择class,其后紧跟class的名称。另外,还有一种选择方式,那就是 根据标签名筛选 ,例如想选择二级标题,直接用h2即可。这是最常用的3种表示,分别是 根据id、class、标签名筛选 ,请牢记它们的写法。
另外,CSS选择器还支持 嵌套选择 ,各个选择器之间加上空格分隔开便可以代表嵌套关系,如#container wrapper p则代表先选择id为container的节点,然后选中其内部的class为wrapper的节点,然后再进一步选中其内部的p节点。另外,如果不加空格,则代表并列关系,如div#container wrapper ptext代表先选择id为container的div节点,然后选中其内部的class为wrapper的节点,再进一步选中其内部的class为text的p节点。这就是CSS选择器,其筛选功能还是非常强大的。另外,CSS选择器还有一些其他语法规则,具体如下表所示。
但是,这样每次都要浪费部分时间去寻找定位点,这样既不很方便,也不高效,那么如何提高爬虫中这部分工作的效率呢?今天我给大家分享一个爬虫的利器,它就是:SelectorGadget 插件。
point and click CSS selectors,强大的谷歌插件 CSS生成器 ,有助于我们快速找到html的节点信息,它也支持Xpath表达式。Selector Gadget是一个开源的Chrome扩展程序,可以轻松地在复杂的网站上生成和选择CSS选择器。安装扩展程序后,转到任意页面并启动它。网站右下方会打开一个方框。 单击您希望选择器匹配的页面元素(它将变为绿色)。然后SelectorGadget将为该元素生成一个最小的CSS选择器,并突出显示(**)选择器匹配的所有内容。现在单击突出显示的元素将其从选择器中删除(红色),或单击未突出显示的元素将其添加到选择器。 通过这个选择和拒绝过程,SelectorGadget可以帮助您找到满足您需求的完美CSS选择器。
首先需要安装一下这个神器。在谷歌浏览器中的应用商店里,搜索到SelectorGadget插件,点击“添加至Chrome”即可。如果不能打开Chrome应用商店,可以通过网上的其他途径获取该插件,之后再手动添加至谷歌浏览器即可。手动添加方法是:打开谷歌浏览器扩展程序,并开启开发者模式,将该插件拖拽到浏览器里,如果不成功,可以选择“加载已解压的扩展程序”,将该文件夹先压缩再解压添加进去。
同时在页面栏上能看到红框处的SelectorGadget标志。
咱们以 >
如何清除下方出现几像素的空白间隙?
方法1:
方法2:
除了top值,还可以设置为text-top | middle | bottom | text-bottom
甚至特定的<length>和<percentage>值都可以
方法3:
如何让文本垂直对齐文本输入框?
如何让单行文本在容器内垂直居中?
如何让超链接访问后和访问前的颜色不同且访问后仍保留hover和active效果?
按L-V-H-A的顺序设置超链接样式即可,可速记为LoVe(喜欢)HAte(讨厌)
为什么Standard mode下IE无法设置滚动条的颜色?
将原来设置在body上的滚动条颜色样式定义到html标签选择符上即可
如何使文本溢出边界不换行强制在一行内显示?
设置容器的宽度和white-space为nowrap即可,其效果类似<nobr>标签
如何使文本溢出边界显示为省略号?
方法(此方法Firefox50尚不支持):
如何使连续的长字符串自动换行?
word-wrap的break-word值允许单词内换行
如何清除浮动?
方法1:
方法2:
方法3:
如何定义鼠标指针的光标形状为手型并兼容所有浏览器?
若将cursor设置为hand,将只有IE和Opera支持,且hand为非标准属性值
如何让已知高度的容器在页面中水平垂直居中?
Know More:已知高度的容器如何在页面中水平垂直居中
如何让未知尺寸的在已知宽高的容器内水平垂直居中?
如何设置span的宽度和高度(即如何设置内联元素的宽高)?
如何给一个元素定义多个不同的css规则?
如何让某个元素充满整个页面?
如何让某个元素距离窗口上右下左4边各10像素?
如何去掉超链接的虚线框?
IE7及更早浏览器由于不支持outline属性,需要通过js的blur()方法来实现,如<a onfocus="thisblur();"
如何容器透明,内容不透明?
原理是容器层与内容层并级,容器层设置透明度,内容层通过负margin或者position绝对定位等方式覆盖到容器层上
方法2:
高级浏览器直接使用rgba颜色值实现;IE浏览器在定义容器透明的同时,让子节点相对定位,也可达到效果
如何让整个页面水平居中?
定义body的text-align值为center将使得IE55也能实现居中
为什么容器的背景色没显示出来?为什么容器无法自适应内容高度?
通常出现这样的情况都是由于没有清除浮动而引起的
如何做1像素细边框的table?
方法1:
方法2:
IE7及更早浏览器不支持border-spacing属性,但是可以通过table的标签属性cellspacing来替代。
如何使页面文本行距始终保持为n倍字体大小的基调?
注意,不要给n加单位
标准模式Standard mode和怪异模式Quirks mode下的盒模型区别?
标准模式下:Element width = width + padding + border
怪异模式下:Element width = width
以图换字的几种方法及优劣分析
思路1:使用text-indent的负值,将内容移出容器
该方法优点在于结构简洁,不理想的地方:
1由于使用场景不同,负缩进的值可能会不一样,不易抽象成公用样式;
2当该元素为链接时,在非IE下虚线框将变得不完整;
3如果该元素被定义为内联级或者内联块级,不同浏览器下会有较多的差异
思路2:使用display:none或visibility:hidden将内容隐藏;
该方法优点在于兼容性强并且容易抽象成公用样式,缺点在于结构较复杂
思路3:使用padding或者line-height将内容挤出容器之外;
该方法优点在于结构简洁,缺点在于:
1由于使用场景不同,padding或line-height的值可能会不一样,不易抽象成公用样式;
2要兼容IE55及更早浏览器还得hack
思路4:使用超小字体和文本全透明法;
该方法结构简单易用,推荐使用
为什么2个相邻div的margin只有1个生效?
本例中box1的底部margin为10px,box2的顶部margin为20px,但表现在页面上2者之间的间隔为20px,而不是预想中的10+20px=30px,结果是选择2者之间最大的那个margin,我们把这种机制称之为“外边距合并”;外边距合并不仅仅出现在相邻的元素间,父子间同样会出现。
简单列举几点注意事项:
外边距合并只出现在块级元素上;
浮动元素不会和相邻的元素产生外边距合并;
绝对定位元素不会和相邻的元素产生外边距合并;
内联块级元素间不会产生外边距合并;
根元素间不会不会产生外边距合并(如html与body间);
设置了属性overflow且值不为visible的块级元素不会与它的子元素发生外边距合并;
如何在文本框中禁用中文输入法?
ime-mode为非标准属性,写该文档时只有IE和Firefox支持
如何解决列表中list-style-image不能精准定位的问题?
不使用list-style-image来定义列表项目标记符号,而用background-image来代替,
并通过background-position来进行定位
如何解决伪对象:before和:after在input标签上的怪异表现的问题?
现象:
在编写本条目时,除了Opera,在所有浏览器下input标签使用伪对象:before和:after都没有效果,即使Opera的表现也同样令人诧异。大家可以试玩一下。浏览器版本:IE6-IE10, Firefox60, Chrome130, Safari51, Opera1151
除了Firefox,在所有浏览器下伪对象:before和:after无法定义过渡和动画效果。
如果这个过渡或动画效果是必须,可以考虑使用真实对象。
1、var a = documentgetElementById("test")getElementsByTagName("div");
代码的test的父标签id的值,div为标签的名字。getElementsByTagName是一个方法。返回的是一个数组。在访问的时候要按数组的形式访问。
2、var b =documentgetElementById("test")childNodes;
使用childNodes获取子节点的时候,childNodes返回的是子节点的集合,是一个数组的格式。他会把换行和空格也当成是节点信息。
扩展资料:
js获取父节点的方式:
1、parentNode获取父节点
获取的是当前元素的直接父元素。parentNode是w3c的标准。
var p = documentgetElementById("test")parentNode
2、parentElement获取父节点
parentElement和parentNode一样,只是parentElement是ie的标准。
var p1 = documentgetElementById("test")parentElement;
3、offsetParent获取所有父节点
一看offset我们就知道是偏移量 其实这个是于位置有关的上下级 ,直接能够获取到所有父亲节点, 这个对应的值是body下的所有节点信息。
var p2 = documentgetElementById("test")offsetParent;
以上就是关于为什么$之后,返回的是jquery对象全部的内容,包括:为什么$之后,返回的是jquery对象、CSS中.class1 .class2 .class3时,在获取的时候是获取哪一个class、R爬虫必备基础——CSS+SelectorGadget等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)