分类目录归档:技术

jQuery中的内容包装与元素删除函数

wrap / unwrap / wrapAll / wrapInner

remove / detach

测试文件见前篇文章中的测试页面代码。点击此处可直接进入

wrap

在元素(标签)外包装一个或多个元素(标签),函数参数接受元素集合,也接受返回标签的回调函数作为参数。如通过在所在标签<span></span> 标签外包装<strong></strong>标签、给所有的段落包装<strong></strong>标签,使得文字变粗,或者给所选元素集合包装一个<div>

在使用的时候注意标签的嵌套是否合法,如给所有的段落外增加<strong></strong>就属于嵌套不合法。

$("span").wrap("");
//$("span").wrap(""); $("span").wrap(""); //像上面这样写也可以 //类为foo的span包装标签,其他span标签包装标签 $("span").wrap(function() { return $(this).is(".foo") ? "" : ""; }); 

unwrap

删除包住所选元素的元素,不接受参数,如要删除包住<span>元素的元素。

$("span").unwrap();

wrapAll

wrapAll将所选的元素集合都用一个元素包装,如将所有的段落用一个<div>包住,需要注意的是wrapAll是会移动元素的,在<span>元素集合上使用wrapAll,使用<strong>包住该元素集合。

var div = $("&lt;div>", { "css" : {"background" : "yellow"} }); $("p").wrapAll(div); //注意元素的移动 $("span").wrapAll("");&lt;/div>

wrapInner

包裹元素内容,可以用标签包住元素内的所有内容,如将所有的段落文字变成粗体。

$("p").wrapInner("");

remove & detach

remove和detach用于删除DOM中的元素,其区别是remove直接删除选中的元素,detach除了删除选中的元素外,还保存了删除元素的数据。

jQuery在DOM中添加元素

学习jQuery使用的测试页面代码如下,后续的继续学习中如无变化则以该文档为测试练习文档,练习时jQuery的版本为1.11.1,其所在路径与测试页面相同,该系列文档为《深入PHP与jQuery开发》的阅读笔记及总结。

    
    
    
      Reading Test Page
    
    
      
Hello World!
      
Another paragraph, but this one has a class.
      
This is a span inside a paragraph.
      
Paragraph with an id. 
         And this sentence is in a span.
      

      
Sign Up Form

append() / appendTo()

作用:在目标元素内之后添加元素
区别:由目标元素调用 / 由新建元素调用
示例:

    //append()
    var para = $("
", {
      "text" : "I'm a new paragraph!",
      "css"  : {"background" : "yellow"}
    });
    $("body").append(para);

    //appendTo()
    $("

", {
       "text" : "I'm a new paragraph!",
       "css"  : {"background" : "yellow"}
    }).appendTo("body");

prepend() / prependTo()

作用: 在目标元素内之前添加元素
区别: 由目标元素调用 / 由新建元素调用
示例:

    //prepend()
    var para = $("
", {
      "text" : "I'm a new paragraph!",
      "css"  : {"background" : "yellow"}
    });
    $("body").prepend(para);

    //prependTo()
    $("

", {
      "text" : "I'm a new paragraph!",
      "css"  : {"background" : "yellow"}
    }).prependTo("body");

after() / insertAfter()

作用: 在目标元素外之后添加元素
区别: 由目标元素调用 / 由新建元素调用
示例:

    //after()
    var para = $("
", {
      "text" : "I'm a new paragraph!",
      "css"  : {"background" : "yellow"}
    });
    $("p.foo").after(para);

    //insertAfter()
    $("

", {
      "text" : "I'm a new paragraph!",
      "css"  : {"background" : "yellow"}
    }).insertAfter("p.foo");

before() / insertBefore()

作用: 在目标元素外之前添加元素
区别: 有目标元素调用 / 由新建元素调用
示例:

    //before()
    var para = $("
", {
      "text" : "I'm a new paragraph!",
      "css"  : {"background" : "yellow"}
    });
    $("p.foo").before(para);

    //insertBefore()
    $("

", {
      "text" : "I'm a new paragraph!",
      "css"  : {"background" : "yellow"}
    }).insertBefore("p.foo");

制作漂亮的Android应用图标

本文翻译自Android Developers博客
原文:Making Beautiful Android App Icons
作者:Roman Nurik

对于一般用户而言,主屏启动图标(有时候又叫应用图标)会带来用户对该应用的第一印象,随着手机跟平板高分辨率的普及,将应用图标做的精细和高质量就变得比较重要。要做到这样,请确保给你的应用制作XHDPI(320dpi)和XXHDDPI(480dpi)的图标。

在制作应用图标时,除了应用图标指南中的规范外,也请遵循下面这些同样重要的规范:

  • 应用图标为48dp大小的方形,并需要提供MDPI、HDPI、XHDPI与XXHDPI分辨率大小,如果不能全部提供,至少也应该提供XHDPI与XXHDPI分辨率大小;
  • Google Play中展示的512px大小的图标除了展示的小细节之外应该和应用图标保持一致;
  • 应用图标应该专门针对Android进行设计,可参考Pure Android指南中提到的,不要从其他平台照搬视觉元素和样式;
  • 应用图标应该是三维立体的,前视图,俯视时有一定的角度的透视,以便让用户感受到立体的存在;
  • 应用图标应该有明显的轮廓,尽量选择独特的形状,避免使用简单的方形或圆形图标;
  • 总体上应用图标应该简洁明了,但在局部也要有丰富的细节;(例如:精细的边缘效果、渐变、纹理等)
  • 应用图标应该使用浅背景,不要太暗或视觉对比太大,比如图标阴影部分;
  • 应用图标应该包括0dp-3dp的内边距,利用不同的内边距达到视觉上的一致性。

需要注意的是对于平板和大屏幕设备,其对于应用图标分辨率的要求要大于其自身分辨率,应该尽可能提供高分辨率的应用图标。举例来说,如果一个具有XHDPI屏幕的平板,则其对应用图标的要求需要达到XXHDPI级别的分辨率。

从写代码中找到乐趣

大概是从7月中下旬开始,每天业余时间会尽量分配一点时间写写代码,主要是自己还真是好这口,能够悠然自得的享受书写代码所带来的乐趣,当然发现这点经过了想当长时间的自省与反思,结合自己也一直在这个行当中从业,如果说能够在一定的时间做些什么的话,无疑写代码对我来说是一件相对靠谱的事情。

从开始到恢复战斗力相对比较缓慢,至今仍在途中,在对基本知识进行一段时间熟悉之后,从8月6日开始写一个具体的应用。工作日相对写的较少,周末大块的时间内写的相对多一点。

晚上思路有点不顺畅,就审查代码,突然想看看这些天写了多少代码,就写了段脚本统计了下代码行数,去除了空行,没去除注释,一共有4010行,大概平均每天230行多点,刨除注释及大括号等,应该差不多在130-150行/天这个样子。既然思路不顺畅,那么就该总结梳理一下这段业余时间的工作。

先来总结一下这个应用的总体设计,实现简单的MVC模式,通过Application作为路由处理请求,请求对应的功能模块由相应的控制器与模型进行交互,模型与实际数据库进行交互,最后由控制器返回View渲染输出。

设计图

依据设计对照相应的文件目录组织概要为

目录组织

大部分功能基本上已经实现,随着代码编写的过程,凸显出很多很细节上的东西,仍需进一步进行处理与完善,同时发现很多不熟悉的东西,咋一看好像能挥舞两下,但就其细节往往下手很慢,这是不熟的表现,例如在前端css部分针对css3中的很多新特性用起来非常的不顺手。同时也对很多php的函数及用法也不是很熟,这部分唯有通过长时间的锻炼慢慢恢复提高,还有很多东西都需要逐步的掌握提高。

通过这段时间的代码编写还是有不少收获的,同时也是很有乐趣的。比较有意思的地方在于能够通过代码验证实际的业务逻辑,这是蛮有意思的,因为在验证的同时会促进你进行思考,进而获取相关行业领域的知识,有助于拓宽视野。举例来说,假如要写一个工资管理的应用,那势必要了解现在工资计量的方式都有哪些,税收是怎么处理,社保是怎么处理的等等工资管理领域的知识。纯粹的掌握一门编程语言是毫无意义的。

写代码的过程也是一个创作过程,也是一个能够锻炼人心态的过程,因为会随着时间的增长需要补的坑会越来越多,这是一个常态的的事情,同时也是很枯燥的事情,能够坚持下来对于做其他事情均会有帮助。

接下来要做的主要包括对于字符校验等安全相关进一步在应用中加强,前端的css与js的进一步完善,业务逻辑严密性的进一步检查及数据处理部分相关代码的实现,然后进一步重构代码,抽取出来更加通用的部分以供以后使用。

 

 

本机使用.htaccess文件Apache配置

在本机调试PHP代码,使用.htaccess文件出现500 Internal Server Error的错误,修改Apache配置后即可正常使用,配置包含两部分:

1、开启rewrite_module

取消前面的注释。

LoadModule rewrite_module modules/mod_rewrite.so

2、设置AllowOverride属性

将你的目录或者别名配置中的AllowOverride修改为All。

AllowOverride All

修改完配置后重启Apache即可正常使用.htaccess文件。