属性选择
分类模型中的属性选择算法研究
1引言
20世纪六、七十年代以来,计算机科学技术的飞速发展使得存储或获得海量数据成为可能,数据存储成本的不断降低则加速了这一过程的发展。因为数据生成和积聚的量超过了分析人员所能分析的数量,建立一套方法来从数据库中自动分析数据和进行知识发现将是一种必然性选择。对这一问题,人们进行了有益的探索,其结果是导致了处理大型或海量数据的数据挖掘技术的产生和发展。
数据挖掘从机器学习、统计学、数据库等多学科领域汲取营养,发展了一套适合自身特点的数据挖掘方法和数据处理手段,用于知识学习、信息提取和结果可视化展现。数据挖掘任务建模过程中,在考虑模型拟合效果、任务系统运行时间和数据存储空间限制的前提下,对某些数据集而言,包含所有或更多的属性/变量的模型并不一定是最适合、最满意的(或最优的)模型。这是因为数据集中存在和学习任务不相关的属性/变量,或者是高度相关而冗余属性/变量,它们会导致无效的归纳和降低学习的效率。最近的研究表明【1】,简单最近邻算法(KNN)对不相关属性非常敏感——它的样本复杂度(达到给定精度所需最低样本量)与冗余属性呈指数性增长。决策树算法,如C4.5,有时可能过度拟合数据,从而获得较大的树,在许多情形下,去掉不相关或冗余的信息可使得C4.5产生更小的树。朴素贝叶斯分类算法由于其给定类的属性独立性假设,冗余属性的存在也可能影响其分类表现。
大量的实证研究结果表明,属性选择在提高学习任务的效率、任务预测的精度和增强、获得规则的可理解性等方面是较有成效的。由此,可知在数据挖掘任务建模过程中,通过一定的方式和方法去掉不相关或冗余属性,进行属性变量选择往往可以获得更令人满意的知识学习模型。这也就引发并促进了有关属性选择问题的研究和讨论。
2属性选择概述
2.1属性选择的定义
在过去的十多年,属性选择己经在机器学习、模式识别中关于数据的预处理部分变得非常重要,特别是对于一些高维的数据,如基因数据、代谢数据、质谱数据等。从理论上讲,属性数目越多,越有利于目标的分类,但实际情况并非如此。在样本数目有限的情况下,利用很多属性进行分类器设计,无论是从计算的复杂程度考虑,还是分类器性能都是不适宜的。同时样本的属性通常可分为4种类型,即有效属性,噪音属性,问题无关属性和冗余属性。其中有效属性是指对学习算法有积极效果的属性,噪音属性会对学习算法造成不良影响,问题无关属性指与学习算法无关的属性,而冗余属性指包含分类有关的信息,但在己有的属性集中添加或删除该属性并不会影响学习算法性能的属性。
对于特定的任务来说,噪音属性的存在容易使分类算法得出错误的结果,导致错误分类;冗余和问题无关属性的存在会降低算法的性能。人们通常通过属性选择或提取来去掉冗余和噪音属性,这是降低复杂度和提高分类精度的有效途径。属性选择在减少冗余不相关属性的同时,往往也可以:(1)减少获取数据的成本;(2)获得更易理解和解释的模型;(3)提高数据挖掘归纳学习的速度和效率;(4)提高分类的精度;(5)降低或避免维度灾难;(6)更好地形成结构化知识。
属性选择是模式识别、统计学以及数据挖掘等领域一个十分活跃的研究方向,其主要目的是从原始属性集中删除不具有预测能力或预测能力及其微弱的属性,建立高效的学习模型。它也是对高维数据进行降维的一种有效手段。当然,不同的应用问题,属性选择定义的角度会有所不同。以下是从不同角度对属性选择所作的各种定义。
理想化:寻找最小属性子集,该子集是目标概念的充分必要属性子集。
典型:在属性个数为n的属性集合中选择属性个数为m的属性子集,m 提高预测精度:属性选择的目的是选择一个属性子集,用该属性子集构建分类器可以提高分类器的预测精度(Prediction Accuracy),或者在不显著降低该分类器预测精度的前提下,减小结构。 逼近初始类分布:属性选择的目标是选择一个属性子集,用该属性子集在训练样例上学习得到的类分布 (Class Distribution)要尽可能的接近用属性全集学习得到的类分布。 参照上述定义可知属性选择目的是选择一个尽可能小的属性子集,用该属性子集训练样例得到的类分布接近原数据,并且学习后得到的分类器预测精度提高或并不显著降低。 2.2属性选择的基本流程 从属性选择的定义描述可知,在进行属性选择的过程中不可避免的面对如下问题: (1) 如何选择属性或属性子集? (2) 如何评判一个属性或属性子集对于学习任务而言是最优或最合适的呢? (3) 应以什么为标准对属性进行排序和选择? (4) 什么样的标准是最适合的? 所有这些问题都是属性选择研究和实际应用中必须考虑的。但是,概括来说,属性子集选择也就是解决属性或属性子集间关系测度、属性空间搜索和属性排序与选择的三步一体问题的过程。 一般来说,如果不考虑属性之间的冗余性,属性选择的执行由子集生成、子集评估、停止准则和结果有效性验证等四个流程组成【5】。如图2.1所示: 图2.1属性选择的基本流程 子集生成是一个属性空间的搜索过程,它产生用于评估的属性子集。如果一个数据集包 ?(不含空集),当N较大时,这使得包含含N个属性,那么全部的候选子集的数量是2N1 一定数量属性的属性空间进行穷尽式搜索也是不可行的。子集评估是根据预先设定的评估准则评价并比较选出最优属性子集的过程。停止规则的作用则在于避免算法程式在执行时进入无限循环之中。合适的停止规则将有利于获得满意的学习过程和结果模型。如果没有一个合适的停止规则,在属性选择进程停止前,程式运行可能需要很长的时间和空间代价,而模型的满意程度并不有所提高。属性选择的停止规则可以设定为以下条件之一:1)一个预先定义所要选择的属性数;2)预先定义的迭代次数;3)是否增加(或删除)任何属性都不产生更好的子集;4)己经根据确定的评估标准获得最优的子集。选择的最优子集需要通过在所选子集和原属性集进行不同的测试和比较,使用人工和现实世界的数据集对产生的结果进行有效性验证。 研究人员已经研究了属性选择过程的不同方面。搜索过程是属性选择问题研究的一个关键问题,例如搜索起始点、搜索的方向和搜索策略,另一个重要的方向是如何评估属性子集的优势度。 2.3属性空间搜索 属性选择通过删除不相关的属性(或维)减少数据量。通常使用属性子集选择方法,属性子集选择的目标是找出最小属性集,使得数据类的概率分布尽可能地接近使用所有属性的原分布。 “如何找出原属性集合的一个‘好的’子集?”d 个属性有个可能的子集。穷举搜索找出属性的最佳子集可能是不现实的,特别是当和数据类数目增加时。因此,对属性子集选择,通常使用压缩搜索空间的启发式算法。通常,这些算法是贪心算法,在搜索属性空间时,总是做看上去是最佳的选择。他们的策略是做局部最优选择,期望由此导致全局最优解。在实践中,这种贪心算法是有效的,并可以逼近最优解。 2d d 属性选择的大多数方法都要牵涉到在属性空间搜索最有可能做出最好类预测的属性子集。属性空间搜索主要考虑4个方面的问题:属性搜索的起始集合、搜索算法、属性子集评价方法和搜索停止标准,不同的搜索方法对这4个问题的实现方式不同。图2.2展示了大家 非常熟悉的天气数据的属性空间【3】。 图2.2天气数据集的属性空间 基本上,属性子集的搜索方向是两个方向中的一个,即图中从上往下或是从下往上。在每个阶段,通过增加或删除一个属性,来改变目前的属性子集。朝下的方向,开始时是不含任何属性,然后每次增加一个,称为正向选择。朝上的方向,开始时包含了所有属性,然后每次减少一个,称为反向消除。 在正向选择时,每个当前子集没有包含的属性被暂时加入,然后对结果子集的属性进行评估,譬如使用交叉验证方法。评估产生一个数字结果用以衡量子集的期望性能,通过这个方法对依次添加每个属性所产生的结果进行定量,选择其中最好的,然后继续。如果向目前的子集中添加任何一个属性都不能有改善时,即终止搜索。这是一个标准的贪心搜索程序,能保证找到一个局部的,不必是全局的、最好的属性集。反向消除操作采用完全类似的模式。在这两种情形中,对于较小的属性集经常引用一个微小偏差。在正向选择中,如果要继续搜索,评估值的增加必须要超出某个预先设定的最小增量。对于反向消除也采用类似的方法。 还存在一些更为精细复杂的搜索算法。正向选择和反向消除法可以结合成双向搜索,同样一开始可以包含所有属性或者不含任何属性。最佳优先搜索(Best-First Search)不是在性能开始下降时停止搜索,而是保存到目前为止已经评估过的所有属性子集清单,并按照性能衡量好坏排序的方法,因此它可以重访先前的配置。只要时间允许它将搜索整个空间,除非是采用某种停止标准。限定范围搜索 (Beam Search)也很类似,只是在每个阶段截取属性子集清单,因此它只含有固定数目的束宽 (Beam width)中最有希望的候选对象。遗传算法(Generic Algnrithm)搜索程序松散地基于自然选择原理,使用对当前的候选子集的随机摄动,而“进化出”好的属性子集。 2.4属性关系测度与属性评价 量化是科学管理的第一步,它导致控制,并最终实现改进。如果你不能够量化某些事情, 那么你就不能理解它。如果你不能理解它,那么你就不能够控制它。如果你不能控制它,那么你就不能改进它(H .James Harrington)。尽管其过分强调了量化的作用,然而在属性选择的执行过程中,属性之间关系的量化的确如此。没有科学合理的量化属性之间的真实关系,也就不能合理评价属性对与目标预测属性有关的规则归纳学习的有用性,合理的属性评价选取规则无从建立,相关属性的选取或不相关和冗余属性的剔除也就无从谈起。 属性选择方法中所使用的属性关系测度基本可归为5类【1】: 1、距离测度(Distance measures):也称可分离性、分歧,或识别度量(discrimination measure),是一类概率函数之间的关系测度。对于一个二分类问题,如果一个属性i f 较另一个属性j f 在类条件密度函数(先验或后验)之间具有更大的条件概率差异时,则属性i f 是更优的;如果差异为零,则这两个属性是不能区分的。这类测度有Kullback-Liebler 可分离性、Bhattcharyya 距离和Kolmogorov 变动距离等。 2.信息测度(Information measures):通过计算一个属性对分类结果的信息增益能力来评估或对属性进行排序。对属性i f 而言,其信息增益被定义为使用属性i f 分类前后的表示信息量的不确定性测度(Uncertainty measures)的差异。这里所指的不确定性测度一般指熵(Entropy measures)。如果属性i f 具有更大的信息增益,那么该属性可以更好地划分数据集,也就说这个属性是更优的。这类型测度有信息增益、信息增益率、共同度和条件共同度。 3.相依性测度(Dependence measures):也称联合性度量(associationmeasures)或相关度量(correlation measures),以一个属性变量预测另一个属性变量能力的方式数量化属性间关系。Pearson 相关系数是其中一种典型的相依性测度,被广泛应用来发现一个属性变量和目标预测属性之间的线性相关程度。如果一个属性变量i f 相较属性j f 而言,和类别属性或目标属性C 具有更高的相关程度(或相依性),那么属性i f 优于属性j f 。线性相关度量忽略了属性因素之间的间接影响,当属性间这种间接相互作用较强时,不能真实反映属性之间的关系。为此,当属性之间的间接相互或协同作用较强时,应引入其他相关测度,如偏相关测度,来定义和测度属性之间的这种间接相互作用关系。 基于相依性(或相关)的测度尽管也是一种信息或距离的测度形式,但是基于一种不同的视角,所以M .B .Bassat(1982)仍把其保留为一种单独的类别。 4.分类误差率测度:和以上过滤方法相比,该测度选择方法是一种绑定式(Wrapper)属性选择方法,其特点是分类或学习算法被用于属性子集的评估和选择。一般而言,该类方法从条件概率角度考虑属性或属性子集的优劣,其结果具有分类精度相对较高的特点,但同时这也使得其具有以下不可避免的缺陷:(1)由于数据本身特点,分类误差不能足够敏感辨别好的属性和更好的属性;(2)此类估价方法需要穷尽的搜索整个属性空间,耗时且不实际;(3)其往往牵涉多维分布和积分,存在计算和解析上的困难。 5.一致性测度:显著地不同于上以上属性评估测度,这类测度强烈地依赖于训练数据集以及决定最小属性子集的最小属性偏差的使用。这类测度方式选择那些能够满足使用者设定的不一致率(或一致率)的最小属性子集。其属性选择过程是在用户给定的不一致率基础上,找出训练实例中满足该不一致率所需的最小属性子集。 以属性关系测度为基础的属性评价,是一个根据预设的标准对属性进行评价排序的过程。这类预设的标准可以是属性间关系的直接测度,也可以是测度的某种函数。 3属性选择算法分类及评价 属性选择算法根据不同的分类标准有不同分类类别。 3.1按不同的搜索策略分 属性选择算法根据不同的搜索策略可以分为【2】:穷举法(Exhaustion)、启发式方法(Heuristic)、随机方法(Random)三种。 3.1.1 穷举法(Exhaustion ) 穷举法是列举全部属性空间中的所有组合情况,并选出最优的特征组合子集。例如属性的总个数为,则其计算时间复杂度为。这种方法的优点是能够找到最优解,但是当属性空间增大时,将导致计算复杂度呈指数级上升,因而很难在实际中使用。 n (2)n O 3.1.2 启发式方法(Heuristic ) 启发式搜索算法是一种近似算法,实现过程不但简单而且快速。当属性空间为时,其时间复杂度一般小于或等于。该方法能获得近似于最优解的解,但是不能保证最优解。常用的算法有向前(向后)搜索、决策树法、Relief 算法、贪心算法等。 n (2)n O 3.1.3 随机方法(Random) 随机方法分为完全随机和基于概率的随机。前者是指简单的随机产生子集,后者是按照给定的概率产生子集。计算复杂度为,但通过设置最大迭代次数可以限制复杂度小于 。常用的方法有LVF (Las Vegas Filter ,LVF ) 、遗传算法、模拟退火算法及其变体等。 (2)n O (2)n O 总之,上述三类中只有穷举法能保证最优,但耗时并且计算复杂度太高,后两种方法以性能为代价换取简单、快速的实现,但并不能保证最优。 3.2按不同的特征评价标准分 属性选择算法按照特征评价标准分类可以分为【2】 :过滤(Filter)模型、打包(Wrapper)模型和嵌入(Embedded)模型。 3.2.1 过滤(Filter )模型 Filter 模型的属性选择过程是独立于学习算法的,使用独立于学习算法的评估准则过滤 掉与问题无关的属性和冗余属性。其选择过程如图3.1所示【4】。 训练数据集 特征集 假设 预测精度 图3.1Filter属性选择的过程 该模型算法按照可以按照不同的标准进行属性筛选,一般有以下两种筛选标准: 1、最小属性子集选择法 从待选属性子集中,选择一个包含属性最少的属性子集,因为通常意义上讲,属性少的子集会降低时间和空间复杂度,提高学习算法的效率。但这种方法也有很大局限性,比如在对学校学生的学习成绩进行研究,其中的学号是学生的唯一标识,如果按照这个选择标准,把学号这个单一属性作为候选虽然满足属性选择的选择标准,但任何学习算法在此基础上进行学习的结果必然很差。 2、根据某种评分标准进行属性选择 此种方法利用精确度、独立性、相关性、信息墒、距离等策略对属性进行评分,但这种方法不能处理冗余属性。 总之,过滤法对学习算法的支持性不是很好,却以其计算的高效性,在高维属性选择中得到很好的应用。此外,由于其独立于学习算法,所以过滤法中提供的属性选择方法也可应用于打包法中。这种方法虽然损失了部分识别精度,但耗时少,灵活性好。一旦针对训练样本选出最佳属性子集,就可据此对大量的测试样本进行属性选择,从而降低实际应用问题中属性选择的代价。 3.2.2 打包(Wrapper)模型 打包法将学习算法作为测试用的黑盒子,利用相关的学习算法对属性子集进行评价,例如,利用学习算法的交差验证进行属性子集评价。其选择过程如图3.2所示【4】: 图3.2Wrapper 属性选择的过程 该模型算法需要一个属性子集搜索方法的支持,所以可以利用上面介绍过的3种属性搜索方式: 1、完全式搜索:也称为穷举搜索,它可以确保找到最优的属性子集。但由于全部可能的属性子集的数量是,当属性数量变大时,这种搜索策略是不可行的。 2N 2、启发式搜索:由于穷尽式搜索受到限制,人们考虑利用启发式来引导搜索。它避免了全部的搜索,但同时也冒着丢失最优子集的风险。由启发式指导进行的深度优先的搜索排序的空间复杂度可能是或更低。利用启发式搜索策略的算法非常易于实现,并且产生子集的过程非常快,因为搜索空间仅仅是属性数量的平方关系。 2()O N 3、不确定搜索:与前面介绍的两种搜索策略不同,这种策略在搜索下一个集合时是随机的(即当前集合没有根据任何先前的集合按照确定的规则有方向地增长或删减)。这种算法能够不断产生最好的子集,随着时间的推移不断提高所选子集的质量。尽管搜索空间仍然是,但是这种策略通过设置最大可能的迭代次数使得搜索的子集数量远远小于。所选子集的最优性取决于可利用的资源。 (2)N O 2N 总之,打包模型算法的优点就是对学习算法的支持度高,但缺点是时间复杂度高,效率低,且改变学习算法时,又要重新进行属性选择,通用性不好。 3.2.3 嵌入(Embedded)模型 如同wrapper 模型,Embedded 模型是针对一个给定的学习算法。但是嵌入模型在建立分类器的同时进行属性选择,与打包模型比较需要较小的时间而可以达到较高的精度。 4属性选择算法举例【2】 属性选择的一般准则是选择尽可能少,有影响力的属性,从而可以构造简单而快速的分类器。以下对三种模型即:过滤模型、打包模型以及嵌入模型的属性选择算法分别进行举例。 4.1 Focus 算法 Almualhm 于1991年提出的Focus 算法是机器学习领域最早的一种Filter 特征选择算法之一。Focus 以空集状态为搜索起点,采用宽度优先的搜索算法进行搜索,例如当前搜索的特征子集为(0,0,0),则下一个搜索的子集为(1,0,0)、(0,1,0)和(0,0,1)。其中0表示不取该特征,1表示选择该特征。直到找到满足不一致度为0的最小的特征子集。定义一个特征子集的一种取值组合为一种模式,不一致度的定义和计算如下: ①不一致定义:某种模式下,如果两个样本除了类别外其余特征值都相同,则说这个模式不一致。 ②某种模式下的不一致数:在这种模式下所有样本个数减去不同类别中最多的样本个数。例如:在模式p 下有个样本,在他们当中个属于类别1,个属于类别2,个属于类别3,满足p n 3c 1c 2c 3c 12p n c c ++=;如果312ma ,)c c c 3c x(,=,则不一致数目为。 3?p p u n c =③若样本总数为,则特征子集下的不一致度为m S p p u U m =∑。 4.2 SVM-RFE 算法 SVM-RFE 算法是一种打包的属性选择算法,在介绍SVM-RFE 算法之前首先介绍一下特征排序,特征排序方法的输出结果不是一个具有固定数目的特征子集,而是一个特征排序的列表。使用者可以根据一定的标准或闭值按照排列的顺序选择所需属性的个数。SVM-RFE(Reeursive Feature Elimination based on Support Veetor Maehine)方法,也称为基于支持向量机的回归特征消去方法,其基本原理是根据输入的数据集,首先利用数据集的全部属性构造支持向量机分类模型,并通过该分类模型计算每个属性的权值,删除权值最小的属性,将其顺序放到属性排序列表中,重复该过程直到所有属性都被排序。SVM-RFE 的执行过程如下所示: 2 i w 输入: 训练样本矩阵:12{,,...}T n X x x x = 类标向量: 12{,,...}T n Y y y y =输出: 特征顺序列表R 初始化: 特征排序列表 {}R = 选择的特征子集 1{,...}d S a a =重复以下过程直到所有特征都被排序: ①利用在S 中的属性训练SVM 分类器; ②计算各个属性的权值向量; 2 i w ③寻找最小的属性e ; 2i w ④更新:{},{}R R e S S e =+=? 4.3随机森林(Random Forest )属性选择 利用随机森林属性选择是一种嵌入式的方法,在训练的过程建立分类器的同时进行属性选择。随机森林是树型分类器的集合,元分类器是用CART 算法构建的没有剪枝的分类回归树。采用简单多数投票法(针对分类)、或单棵树输出结果的简单平均(针对回归)得到RF 的最终输出。 随机森林中单棵树的生长可概括为以下几点: ①使用Bagging 方法形成不同的训练集:假设原始训练集中的样本数为M ,从中有放回地随机选取M 个样本形成一个新的训练集,以此生成一棵分类树。 ②在分类回归树的内部节点随机选择候选特征:假设共有N 个特征,指定一个正整数;在每个内部节点,从N 个特征中随机抽取mt 个特征作为候选特征,选择这个特征上最好的分裂方式对节点进行分裂。在整个森林的生长过程中,mt 的值保持不变。 mtry N < 当形成了若干棵树后,便建成了一个随机森林。利用随机森林进行属性选择最原始的方法是统计各个属性被整个森林中的树用到的次数。使用次数最多的属性便是相对最重要的属性。后来又产生了两种更加缜密的判别属性重要性的算法,即基于随机森林中使用的基尼评价标准 (Gini criterion)和OOB (out-of-bag )的属性选择算法。其中使用较多并且效率较高的是基于OOB 的属性选择方法,所谓OOB 是指对森林中的每一棵树使用Bagging 方法抽取训练集之后,未被抽中的样品。 5总结 随着计算机技术的发展,计算机上存储的数据呈爆炸性增长.而这些数据中包含着大量与数据挖掘任务不相关和冗余的数据,如何对数据进行缩减,保证数据挖掘算法的执行效率和性能,是在进行数据挖掘时必须面对的问题。 分类与属性选择是数据挖掘中研究的两个重要课题,特别是对属性选择算法的研究。属性选择通常作为数据挖掘的一个数据预处理步骤,或归纳学习算法的一部分,是机器学习、模式识别和海量数据挖掘建模的一个重要环节,其输出直接影响模型的输出结果,属性选择方法的改进也就直接意味着模型输出性能的改进。 属性选择研究从讨论属性与数据挖掘或机器学习任务的相关测度出发,研究不同的属性关系测度方法、属性空间搜索策略和搜索方法对于建模结果的影响,最后从建模结果、算法运行空间和时间耗费等角度评判相应方法和策略的优劣。 6参考文献 【1】 曾德志. 数据挖掘中基于统计相关的属性选择研究西南财经大学 【2】 刘鸣鸣. 几类复杂体系的分类及属性选择问题研究大连理工大学 【3】 曹源. 基于属性间相关性分类理论的属性选择方法研究北京交通大学 【4】 Helyane Bronoski Borges, Júlio Cesar Nievola. Attribute Selection Methods Comparison for Classification of Diffuse Large B-Cell Lymphoma. World Academy of Science, Engineering and Technology 8 2005 【5】 M. Dash , H. Liu. Feature Selection for Classification. Intelligent Data Analysis 1 (1997) 131-156 $的选择器部分: 凡是运用$,其返回值是一个object $选择器主要用于选择标签.基本用法是同css的选择器.但是,很让人兴奋的是,他支持常见的浏览器,而css中很多选择器是IE6所不支持的. 1.基本选择器(3种): $("标签名"),如$("p")是选取了所有的p标签节点 $("#id名"),如$("#test")是选取了id为test的标签节点 $(".class名"),如$(".test")是选取了所有class为test的标签节点 上面的$("标签名")和$(".class名")返回的都是所有满足的节点,至于进一步筛选可以添加一些函数,如eq,gt,lt 等等. 2.组选择器: 下面还是现做一个约定:把"标签名或#id名或.class名"记作mix,则mix表示一个标签名,或一个#id或一个.class. $("mix,mix,mix,..."),如:$("div,#test1,p,.test2,#test3") 3.后代选择器: $("mix mix"),当然可以是多个嵌套,但后代选择器可以是深层子代,所以$("mix mix mix ...")这种写法作用不大.例子:$("div .test"):在div标签内的所有具有test的class的后代元素(就是被div嵌套的class属性为test 的标签) 可以见DEMO。 4.子选择器: $("mix>mix"),这个放在后代选择器后面是为了和它做对比.子选择器只能选择第一代子代.不处理深层嵌套.例子: $("div>.test") 在$("div + #test")中能取到p段落节点 则不能取到 6.属性选择器: 把属性选择器不放在css选择器里面是因为jQuery中写法是不一样的.至于css中写法可以参考我之前写的一篇css的选择器一文.jQuery中是和xPath类似的写法: $("mix[@attr]"):选取所有该mix且具有attr属性的节点 $("mix[@attr=a_value"]):选取所有该mix且具有attr属性并满足属性值为a_value的节点 $("mix[@attr^=a_value_head"]):attr属性的属性值是以a_value_head开头的 $("mix[@attr$=a_value_end"]):attr属性的属性值是以a_value_end结尾的 $("mix[@attr*=a_value"]):attr属性的属性值中包含a_value 7.进一步选择器: jQuery常用功能大全 1、关于页面元素的引用 通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery 对象(集合对象),不能直接调用dom定义的方法。 2、jQuery对象与dom对象的转换 只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是jquery对象。 普通的dom对象一般可以通过$()转换成jquery对象。 如:$(document.getElementByIdx_x("msg"))则为jquery对象,可以使用jquery的方法。 由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。 如:$("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5]这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。 以下几种写法都是正确的: $("#msg").html(); $("#msg")[0].innerHTML; $("#msg").eq(0)[0].innerHTML; $("#msg").get(0).innerHTML; 3、如何获取jQuery集合的某一项 对于获取的元素集合,获取其中的某一项(通过索引指定)可以使用eq或get(n)方法或者索引号获取,要注意,eq返回的是jquery 对象,而get(n)和索引返回的是dom元素对象。对于jquery对象只能使用jquery的方法,而dom对象只能使用dom的方法,如要获取第三个 单选: 1、下面哪一种不属于Jquery的选择器。(D) A:基本选择器B:层次选择器 C:表单选择器D:节点选择器 2、使用jquery检查元素在网页上是否存在。(B) A:if($("#id")) { //do someing... } B: if($("#id").length > 0) { //do someing... } C: if($("#id").length() > 0) { //do someing... } D: if($("#id").size > 0) { //do someing... } 3、新闻,获取元素title的属性值。(C) A:$("a").attr("title").val(); B:$("#a").attr("title"); C:$("a").attr("title"); D:$("a").attr("title").value; 4、执行下面语句 $(document).ready(function(){ $("#click").click(function(){ alert("click one time"); }); $("#click").click(function(){ alert("click two time"); }); }); 单击按钮,这个会有什么效果。(C) A:弹出一次对话框,显示click one time 。 B:弹出一次对话框,显示click two time 。 C:弹出两次对话框,依次显示click one time,click two time。D:js编译错误。 5、页面中有三个元素,如下: CSS选择器笔记 阮一峰整理 参考网址:456 Berea Street 一、基本选择器 实例: * { margin:0; padding:0; } p { font-size:2em; } .info { background:#ff0; } https://www.360docs.net/doc/13632622.html, { background:#ff0; } https://www.360docs.net/doc/13632622.html,.error { color:#900; font-weight:bold; } #info { background:#ff0; } p#info { background:#ff0; } 二、多元素的组合选择器 实例: div p { color:#f00; } #nav li { display:inline; } #nav a { font-weight:bold; } div > strong { color:#f00; } p + p { color:#f00; } 三、CSS 2.1 属性选择器 实例: p[title] { color:#f00; } div[class=error] { color:#f00; } td[headers~=col1] { color:#f00; } p[lang|=en] { color:#f00; } blockquote[class=quote][cite] { color:#f00; } 四、CSS 2.1中的伪类 实例: p:first-child { font-style:italic; } input[type=text]:focus { color:#000; background:#ffe; } input[type=text]:focus:hover { background:#fff; } q:lang(sv) { quotes: "\201D" "\201D" "\2019" "\2019"; } 五、 CSS 2.1中的伪元素 jquery选择器之获取父级元素、同级元素、子元素 1、父级元素 1.1 parent() 方法返回被选元素的直接父元素。 如:$("span").parent(); 1.2 parents() 方法返回被选元素的所有祖先元素,它一路向上直到文档的根元素()。 如:$("span").parents(); 也可以使用可选参数来过滤对祖先元素的搜索。 如:$("span").parents("ul"); 1.3 parentsUntil() 方法返回介于两个给定元素之间的所有祖先元素。 如:$("span").parentsUntil("div"); 2、同胞 2.1 siblings() 方法返回被选元素的所有同胞元素。如:$("h2").siblings(); 返回属于 2.2 next() 方法返回被选元素的下一个同胞元素。 如:$("h2").next(); 2.3 nextAll() 方法返回被选元素的所有跟随的同胞元素。如:$("h2").nextAll(); 2.4 nextUntil() 方法返回介于两个给定参数之间的所有跟随的同胞元素。 如:$("h2").nextUntil("h6"); 2.5 prev(), prevAll() 以及prevUntil() 方法的工作方式与上面的方法类似,只不过方向相反而已:它们返回的是前面的同胞元素。 3、子元素 3.1 children() 方法返回被选元素的所有直接子元素。 如:$("div").children(); 返回类名为"1" 的所有元素,并且它们是 一、jQuery获取Select选择的Text和Value:语法解释: 1.$("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发 2.varcheckText=$("#select_id").find("option:selected").text(); //获取Select选择的Text 3.varcheckValue=$("#select_id").val(); //获取Select选择的Value 4.varcheckIndex=$("#select_id ").get(0).selectedIndex; //获取Select选择的索引值 5.varmaxIndex=$("#select_idoption:last").attr("index"); //获取Select最大的索引值 二、jQuery设置Select选择的Text和Value:语法解释: 1.$("#select_id ").get(0).selectedIndex=1; //设置Select索引值为1的项选中 2.$("#select_id ").val(4); // 设置Select的Value值为4的项选中 3.$("#select_id option[text='jQuery']").attr("selected", true); //设置Select的Text值为jQuery的项选中 三、jQuery添加/删除Select的Option项:语法解释: 1.$("#select_id").append(""); //为Select追加一个Option(下拉项) 2.$("#select_id").prepend(""); //为Select插入一个Option(第一个位置) 3.$("#select_idoption:last").remove(); //删除Select中索引值最大Option(最后一个) 4.$("#select_id option[index='0']").remove(); //删除Select中索引值为0的Option(第一个) 5.$("#select_id option[value='3']").remove(); //删除Select中Value='3'的Option 6.$("#select_id option[text='4']").remove(); //删除Select中Text='4'的Option 四、获取值 1.jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中,及其相关获取一组radio被选中项 的值var item = $('input[@name=items][@checked]').val(); 2.获取select被选中项的文本:var item = $("select[@name=items] option[@selected]").text(); 3.select下拉框的第二个元素为当前选中值:$('#select_id')[0].selectedIndex = 1; 4.radio单选组的第二个元素为当前选中值:$('input[@name=items]').get(1).checked = true; 5.文本框,文本区域:$("#txt").attr("value"); 6.多选框checkbox:$("#checkbox_id").attr("value"); 7.单选组radio:$("input[@type=radio][@checked]").val(); 8.下拉框select:$('#sel').val(); 五、控制表单元素: 1.文本框,文本区域:$("#txt").attr("value",'');//清空内容 2.$("#txt").attr("value",'11');//填充内容 3.多选框checkbox:$("#chk1").attr("checked",'');//不打勾 4.$("#chk2").attr("checked",true);//打勾 5.if($("#chk1").attr('checked')==undefined) //判断是否已经打勾 6.单选组radio:$("input[@type=radio]").attr("checked",'2');//设置value=2的项目为当前选中项 7.下拉框select:$("#sel").attr("value",'-sel3');//设置value=-sel3的项目为当前选中项 8.$("").appendTo("#sel")//添加下拉框的option 9.$("#sel").empty();//清空下拉框 10.//遍历option和添加、移除option functionchangeShipMethod(shipping){ varlen = $("select[@name=ISHIPTYPE] option").length if(shipping.value != "CA"){ $("select[@name=ISHIPTYPE] option").each(function(){ if($(this).val() == 111){ $(this).remove(); } }); }else{ $("").appendTo($("select[@name=ISHIPTYPE]")); } } //取得下拉選單的選取值 $(#testSelectoption:selected').text(); 或$("#testSelect").find('option:selected').text(); 或$("#testSelect").val(); 六、下拉框: 1.var cc1 = $(".formc select[@name='country'] option[@selected]").text(); //得到下拉菜单的选中项的文本(注意中间有空格) 2.var cc2 = $('.formc select[@name="country"]').val(); //得到下拉菜单的选中项的值 3.var cc3 = $('.formc select[@name="country"]').attr("id"); //得到下拉菜单的选中项的ID属性值 4.$("#select").empty();//清空下拉框//$("#select").html(''); 5.$("").appendTo("#select")//添加下拉框的option 稍微解释: 1.select[@name='country'] option[@selected] 表示具有name 属性,并且该属性值为'country' 的select元素里面的具有selected 属 性的option 元素;可以看出有@开头的就表示后面跟的是属性。 2.单选框: CSS选择器 1.常用选择器 常用的选择器有类型选择器和后代选择器。 1.1类型选择器 类型选择器用来选择特定类型的元素。可以根据三种类型来选择。 1)ID选择器,根据元素ID来选择元素。 前面以”#”号来标志,在样式里面可以这样定义: #demoDiv{ color:#FF0000; } 这里代表id为demoDiv的元素的设置它的字体颜色为红色。 我们在页面上定义一个元素把它的ID定义为demoDiv,如: 这个段落字体颜色为红色 最后,用浏览器浏览,我们可以发现所有class为demo的元素都应用了这个样式。包括了页面中的div元素和p元素。 上例我们给两个元素都定义了class,但如果有很多个元素都会应用这个元素,那个一个个的定义元素,就会造成页面重复的代码太多,这种现象称为“多类症”。 我们可以改成这样来定义。 CSS选择器的声明与嵌套 使用CSS选择器控制HTML标记的时候,每个选择器的属性可以一次声明多个,选择器本身也可以同时声明多个。 并且,任何形式的选择器,都是合法的,标记选择器,class选择器和ID选择器都可以集体声明。 集体声明 在声明CSS选择器时,如果某些选择器的风格是完全相同的,或者部分相同,这时便可以使用集体声明的方式,将风格相同的选择器同时声明。 [html]view plain copy print? 1. 2. 3. 17. 18. 19. 集体声明p2 27. 集体声明p3 28. 29. 30. 全局声明 对于实际网站中,如果希望页面中所有的标记都使用同一种CSS样式,但是,又不希望逐个来集体声明,这是可以使用全局声明符号*来声明。 [html]view plain copy print? 1. 2. 3.jQuery选择器
jQuery常用功能大全
Jquery练习题2
CSS选择器笔记
jquery选择器 之 获取父级元素、同级元素、子元素
的同胞元素的所有元素: $("h2").siblings("p");
jQuery获取Select选择的Text和 Value
CSS选择器
CSS选择器的声明与嵌套
集体声明h1
21.集体声明h3
23.集体声明h4
24.集体声明h5
25.集体声明p1 26.