zoukankan      html  css  js  c++  java
  • html/jquery最实用功能与注意点

    获取某元素的父元素

    通常用在根据被click的td获取tbody时。

    parent是指取得一个包含着所有匹配元素的唯一父元素的元素集合。
    parents则是取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素)。可以通过一个可选的表达式进行筛选。
    可以看出parent取的很明确,就是当前元素的直接父元素(一般不应使用,否则会限制死结构,不够语义化);parents则是当前元素的祖先元素。下面列出例子说明:
    <div id='div1'>
      <div id='div2'><p></p></div>
      <div id='div3' class='a'><p></p></div>
      <div id='div4'><p></p></div>
    </div>

    $('p').parent()取到的是div2,div3,div4
    $('p').parent('.a')取到的是div3
    $('p').parent().parent()取到的是div1,这点比较奇特;不过Jquery对象本身的特点决定了这是可行的。
    $('p').parents()取到的是div1,div2,div3,div4
    $('p').parents('.a')取到的是div3

    获取某元素的子孙元素

    通常用于获取tr或者tbody下的某个元素比如checkbox。

    children(selector) 方法是返回匹配元素集合中每个元素的所有子元素仅儿子辈)。参数可选,添加参数表示通过选择器进行过滤,对元素进行筛选。

    .find(selector)方法是返回匹配元素集合中每个元素的后代。参数是必选的,可以为选择器、jquery对象可元素来对元素进行筛选。

    jquery attr和prop的差异

    常用于设置readonly,checked,selected等这些属性时会遇到。

    比如,对于jquery操作复选框的情况

    $("#CheckedAll").click(function () {
                    if ($(this).is(":checked")) {
                        $("[name=items]:checkbox").attr("checked", true);
                    } else {
                        $("[name=items]:checkbox").attr("checked", false);
                    }
                });
    我测试下来是每次都不生效,但是确实执行了。
    下面换成prop:
    $("#CheckedAll").click(function () {
                    if ($(this).is(":checked")) {
                        $("[name=items]:checkbox").prop("checked", true);
                    } else {
                        $("[name=items]:checkbox").prop("checked", false);
                    }
                });
    就没有问题了。
    具体两者的差别可详细参考http://blog.jquery.com/2011/05/12/jquery-1-6-1-released/,这里其实说的非常详细了,其实跟jquery没什么关系,主要是dom和js自身理解到位的问题。

    display样式
    对于布局来说,这应该算是最重要的属性之一了。
    • display:block
      1. block元素会独占一行,多个block元素会各自新起一行。默认情况下,block元素宽度自动填满其父元素宽度。
      2. block元素可以设置width,height属性。块级元素即使设置了宽度,仍然是独占一行。
      3. block元素可以设置margin和padding属性。
    • display:inline
      1. inline元素不会独占一行,多个相邻的行内元素会排列在同一行里,直到一行排列不下,才会新换一行,其宽度随元素的内容而变化。
      2. inline元素设置width,height属性无效。
      3. inline元素的margin和padding属性,水平方向的padding-left, padding-right, margin-left, margin-right都产生边距效果;但竖直方向的padding-top, padding-bottom, margin-top, margin-bottom不会产生边距效果。
    • display:inline-block
      1. 简单来说就是将对象呈现为inline对象,但是对象的内容作为block对象呈现。之后的内联对象会被排列在同一行内。比如我们可以给一个link(a元素)inline-block属性值,使其既具有block的宽度高度特性又具有inline的同行特性。
    • 一般我们会用display:block,display:inline或者display:inline-block来调整元素的布局级别,其实display的参数远远不止这三种,仅仅是比较常用而已。

    元素本身居中

    有些时候,我们希望元素本身居中显示,比如显示标题或者分页栏,这个特性貌似css本身没有支持,要利用html自身的align属性(这设计还是比较奇葩),如下所示:

    <div align="center"><button>hit me</button></div>

    position样式

    大部分的定位和布局都可以使用margin/padding完成了,但有些时候使用margin/padding总是不够自然或者不合适。所以position样式虽然使用的绝对频率不怎么高,但很多时候仍然是必须的。

    position的四个属性值:

    1.relative
    2.absolute
    3.fixed
    4.static
    下面分别讲述这四个属性。

    <div id="parent">
         <div id="sub1">sub1</id>
         <div id="sub2">sub2</id>
    </div>

    1. relative

    relative属性相对比较简单,我们要搞清它是相对哪个对象来进行偏移的。答案是它本身的位置。在上面的代码中,sub1和sub2是同级关系,如果设定sub1一个relative属性,比如设置如下CSS代码:

    #sub1
    {
        position: relative;
        padding: 5px;
        top: 5px;
        left: 5px;
    }

    我们可以这样理解,如果不设置relative属性,sub1的位置按照正常的文档流,它应该处于某个位置。但当设置sub1为的position为relative后,将根据top,right,bottom,left的值按照它理应所在的位置进行偏移,relative的“相对的”意思也正体现于此。

    对于此,您只需要记住,sub1如果不设置relative时它应该在哪里,一旦设置后就按照它理应在的位置进行偏移。

    随后的问题是,sub2的位置又在哪里呢?答案是它原来在哪里,现在就在哪里,它的位置不会因为sub1增加了position的属性而发生改变。

    如果此时把sub2的position也设置为relative,会发生什么现象?此时依然和sub1一样,按照它原来应有的位置进行偏移。

    注意relative的偏移是基于对象的margin的左上侧的。

    2. absolute

    这个属性总是有人给出误导。说当position属性设为absolute后,总是按照浏览器窗口来进行定位的,这其实是错误的。实际上,这是fixed属性的特点。

    当sub1的position设置为absolute后,其到底以谁为对象进行偏移呢?这里分为两种情况:

    (1)当sub1的父对象(或曾祖父,只要是父级对象)parent也设置了position属性,且position的属性值为absolute或者relative时,也就是说,不是默认值的情况,此时sub1按照这个parent来进行定位。

    注意,对象虽然确定好了,但有些细节需要您的注意,那就是我们到底以parent的哪个定位点来进行定位呢?如果parent设定了margin,border,padding等属性,那么这个定位点将忽略padding,将会从padding开始的地方(即只从padding的左上角开始)进行定位,也就是忽略padding,当然并不会忽略margin和border。

    接下来的问题是,sub2的位置到哪里去了呢?由于当position设置为absolute后,会导致sub1溢出正常的文档流,就像它不属于 parent一样,它漂浮了起来,在DreamWeaver中把它称为“层”,其实意思是一样的。此时sub2将获得sub1的位置,它的文档流不再基于 sub1,而是直接从parent开始。

    (2)如果sub1不存在一个有着position属性的父对象,那么那就会以body为定位对象,按照浏览器的窗口进行定位,这个比较容易理解。

    3. fixed

    fixed是特殊的absolute,即fixed总是以body为定位对象的,按照浏览器的窗口进行定位,即使拖动滚动条,他的位置也是不会改变的。与background-attachment:fixed相似
    当然在Dreamweaver下似乎没有支持

    4. static

    position的默认值,一般不设置position属性时,会按照正常的文档流进行排列。

    div+iframe布局

    现在很多的布局都是用div+iframe的风格,如下:

    content部分一般需要自适应,所以就需要每次onload的时候重新计算大小,如下:

    <iframe src="#" id="content" scrolling="no" onload="changeFrameHeight()" frameborder="0"></iframe>

    function changeFrameHeight(){
        var ifm= document.getElementById("content"); 
        ifm.height=document.documentElement.clientHeight;

    }

    window.onresize=function(){  
         changeFrameHeight();  

    还需要注意的一点是,使用这种布局之后,通常我们会希望将一些全局信息比如字典、配置参数等放在nav所在的主页面,这样就不需要每一次加载具体页面到content时重复加载,这个时候就涉及到子页面访问父页面中的方法或者熟悉,默认情况下,这是两个独立的html页面,是不能直接互相访问的。如果需要访问,可使用如下方式:

    子页面调用父页面方法:parent.window.parentMethod();

    子页面调用父页面属性:parent.window.obj;

    父页面调用子页面方法:FrameName.window.childMethod();

    父页面调用子页面属性:FrameName.window.obj;

    一般来说,不应该直接访问对方页面的DOM对象,而是通过方法进行访问。如果一定要访问,可获取到页面的window.document对象后,访问DOM元素。

    使用ajax请求的返回值直接替换当前HTML页面

    有些时候,由于现成系统或者其他约束,我们需要将ajax请求返回的html页面替换当前页面,此时可以用$(document).find("html").html(data);。需要注意的是,此时浏览器的地址栏不会发生变化。

  • 相关阅读:
    Umbraco中更换IndexSet中的NodeType后,搜索页面没有做出对应更改的效果
    Umbraco部署到IIS中权限问题(back office没有权限新建template)
    C控制台密码输入:输入一个字符显示一个星号
    C项目实践--家庭财务管理系统
    C 编程中fseek、ftell的用法总结
    C ++模板的声明和实现为何要放在头文件中?
    头文件与cpp文件为什么要分开写
    printf、sprintf与fprintf 的用法区分
    C编程中fread 、fwrite 用法总结
    C从控制台(stdin)输入带空格的字符串到字符数组中
  • 原文地址:https://www.cnblogs.com/zhjh256/p/5935716.html
Copyright © 2011-2022 走看看