jquery的选择器列表

javascript要选择ID还是比较麻烦的。但是最近知道jquery的如此强大,《锋利的jquery》一书算是帮我总结了吧。其实也就是对于jquery的doc一个中文翻译。

但是为了方便以后自己学习,还是摘抄在这里吧。

总结一下 #xxx 表示选择 id="xxx"的元素
.xxx表示选择class="xxx"元素
xxx 表示所有的 xxx 标签元素

1. 基本选择器
$("#test") 选取id="test"的元素
$(".test") 选取class="test"的元素
$("p") 选取所有<p>元素
$("*") 选取所有的元素
$("div,span,p.myClass") 选取所有<div>,<span>和拥有class="myClass"的<p>标签的一组元素

2. 层次选择器
$("div span") 选取<div>里的所有的<span>元素
$("div > span") 选取<div>元素下元素名是<span>的子元素
$(‘.one + div’) 选取class="one"的下一个<div>的兄弟元素
$(‘#two~div’) 选取id="two"的元素后面的所有<div>兄弟元素

3. 基本过滤选择器
$("div:first") 选取所有<div>元素中第一个<div>元素
$("div:last") 选取所有<div>元素中最后一个<div>元素
$("input:not(.myClass)") 选取所有class不等于myClass的<input>元素
$("input:even") 选取索引是偶数的<input>元素

$("input:odd") 选取索引是奇数的<input>元素
$("input:eq(1)") 选取索引等于1的<input>元素
$("input:gt(1)") 选取索引大于1的<input>元素,但是不包括1
$("input:lt(1)") 选取索引小于1的<input>元素,但是不包括1

$(":header") 选取网页中所有的<h1>,<h2>,<h3>…..
$("div:animated") 选取正在执行动画的<div>元素

4. 内容过滤选择器
$("div:contain(‘我’)") 选取含有文本"我"的<div>元素

$("div:empty") 选取不包含子元素(包括文本元素)的<div>空元素
$("div:has(p)") 选取含有<p>元素的<div>元素
$("div:parent") 选取拥有子元素(包括文本元素)的<div>元素

5. 可见性过滤选择器
$(":hidden") 选取所有不可见的元素。包括<input type="hidden"/>, <div style="display:none;"> ……

$("div:visible") 选取所有可见的<div>元素

6. 属性过滤选择器
$("div[id]") 选取拥有属性id的元素
$("div") 选取属性title="test"的<div>元素
$("div") 选取属性title不等于"test"的<div>元素(注意:没有属性title的<div>元素也会被选取)

$("div") 选取属性title以"test"开始的<div>元素
$("div") 选取属性title以"test"结束的<div>元素
$("div") 选取属性title含有"test"的<div>元素

$("div[id]") 选取拥有属性id,并且属性title以"test"结束的<div>元素

7. 子元素过滤选择器
$(":nth-child(index/even/odd/equation)") 为每一个父元素匹配子元素,并且:nth-child(index)的index是从1开始的
$("ul li:first-child") 选取每个<ul>中第一个<li>元素

$("ul li:last-child") 选取每个<ul>中最后一个<li>元素
$("ul li:only-child") 在<ul>中选取是唯一子元素的<li>元素

8. 表单对象属性过滤选择器
$("#form1:enabled") 选取id为"form1"的表单内的所有可用元素

$("#form2:disabled") 选取id为"form2"的表单内所有不可用的元素
$("input:checked") 选取所有被选中的<input>元素
$("select:selected") 选取所有被选中的选项元素

9. 表单对象属性过滤示例
$(":input") 选取所有<input>,<textarea>,<select>和<button>元素

$(":text") 选取所有的单行文本框
$(":password") 选取所有的密码框
$(":radio") 选取所有的单选框
$(":checkbox") 选取所有的复选框
$(":submit") 选取所有的提交按钮
$(":image") 选取所有的图像按钮
$(":reset") 选取所有的重置按钮

$(":button") 选取所有的按钮
$(":file") 选取所有的上传域
$(":hidden") 选取所有不可建元素

###########################################

Best regards
Timo Seven
blog: http://www.timoseven.com
twitter: http://twitter.com/zauc
Linux System Admin & MySQL DBA

Advertisements

初用addslashes

最近一直忙一个php版本的nginx平台管理系统,需要将很多不同的nginx配置文件存入到mysql中。

但是nginx配置文件中单引号,双引号,斜杠这些符号比较多,一直没法存入到数据库中。于是找了下看看php有什么通过转义的方式存入mysql。发现居然还是有的。在php.ini文件中进行如下设置就好了。

magic_quotes_gpc = On (Get/Post/Cookie)
magic_quotes_runtime = Off
magic_quotes_sybase = On

经过如上设置就很容易的将Nginx配置文件存入到数据库中,但是会把'(单引号)存为”(2个单引号)。这种就会让我每次还得把2个单引号转为1个单引号再进行发布。看了上面3个方法的官方文档,居然从5.3后是被默认关闭的,并且在6中就被废弃掉了。那看来只能找其它的代替。还好文档中提到了用addslaashes()方法来代替。用了下还真是比较好用。

使用如下:

addslashes()
$str=addslashes($str);

这样存入mysql中的是没有斜杠,也不会变成2个单引号。看来这就是为什么上面3个参数会在5.3以后被默认关闭了。

很多方法都是到需要的再查资料吧,我还是不喜欢一上手就系统化学习,那样经常会由于收益曲线不高而最终放弃。

###########################################

Best regards
Timo Seven
blog: http://www.timoseven.com
twitter: http://twitter.com/zauc
Linux System Admin & MySQL DBA

初学css

我是一个系统工程师&MySQL DBA, 所以页面设计一直不是自己擅长的。对于页面设计就懂点非常基础的。

最近一直在看<dom scripting>这本书,一本比较基础的书,第二章有很多css的内容。于是就当css基础来学了。

css的内容是加在<head>里面的<style>部分的。一个简单的css内容如下:





<title>Shopping list</title>

p{
color: yellow;
font-family: "arial", sans-serif;
font-size: 1.2em;
}
li{
color: blue;
font-size: 1em;
}
body{
color: white;
background-color: black;
}
.special{
font-style: italic;
color: red;
}
h2.special{
text-transform: uppercase;
}
#purchases{
border: 1px solid white;
background-color: #333;
color: #ccc;
padding: 1em;
}
#purchases li{
font-weight: bold;
}



<h1>What to buy</h1>
<p>Don't forget to buy this stuff.</p>
<ul id="purchases">
<li>A tin of beans</li>
<li>Cheese</li>
<li>Milk</li>
</ul>
<p class="special">This paragraph has the special class</p>
<h2 class="special">So does this headline</h2>



其中大括号外的p,li,body等等这些都是表示匹配的对象,大括号里面的都是匹配的内容。

比如p 就是针对了

<p class="special">This paragraph has the special class</p>

而.special 实际表示的就是*.special,就是匹配所有

<p class="special">This paragraph has the special class</p>
&lt;h2 class=&quot;special&quot;&gt;So does this headline&lt;/h2&gt;

因为这2行实际就是p.special和h2.special。看来.这种表示法是来表示class name的。

 

而最后一种#purchases应该就是表示id name,比如这里就是匹配了

<ul id="purchases">

最后我们看到很少的Html代码就能表现出来如下这种样子:

 

css的存在就是希望把html中用来表示的部分分离开来,这样以后就可以方便的调整这个页面的格式,就算是不改变这个html文件内容,而只需要更改css部分。

当然css的内容还有很多,远不止这些,今天问公司里借了<css禅意花园>还没好好看呢,望能提高自己的html页面水平。

 

 

###########################################

Best regards
Timo Seven
blog: http://www.timoseven.com
twitter: http://twitter.com/zauc
Linux System Admin & MySQL DBA

用python写的房价分析脚本

分析基础是之前的shell分析脚本后的csv文件。但是我现在分析的是平均房价等等信息。由于之前那个csv文件格式不是特别好,所以没法使用二维数组这种方式来分析,所以只能简单的使用的一维数组。

分析的步骤基本如下,读入文件,然后根据关键用正则把每个数据读入到一个数组中,方法有点笨,因为原日志文件中有”平米”,’万元’,所以分2次读入的,不直到能否跟简单点,尝试过用group(),但是在compile中没法使用,所以大家有什么好的方法可以回复给我。

#!/usr/bin/python
#coding:UTF-8

import re


f = open('../../house/today.anjuke.2010-08-27.csv','r')

totalDolar=[]
totalPingmi=[]
re_obj = re.compile(r"\d+万元")
re_num = re.compile(r"\d+|\d+\.\d+")
re_ping = re.compile(r"\d+平米|\d\.\d+平米")
for row in f:

  for match in re_obj.findall(row):
        for num in re_num.findall(match):
            totalDolar.append(int(num))

  for pingmi in re_ping.findall(row):
        for pingmiNum in re_num.findall(pingmi):
            totalPingmi.append(int(pingmiNum))

#print totalPingmi
print '共有房产: %d套' % len(totalDolar)
print '所有房产总价: %d万元' % sum(totalDolar)
avg=float(sum(totalDolar))/(len(totalDolar))
avgPingmi=float(sum(totalDolar))/(sum(totalPingmi))
print '每套均价:%f万元' % avg
print '每平米均价:%f万元' % avgPingmi
#break
f.close()

###########################################

Best regards
Timo Seven
blog: http://www.timoseven.com
twitter: http://twitter.com/zauc
Linux System Admin & MySQL DBA

一个分析安居客最新房价的shell脚本

为了能够得到最新的房屋价格,虽然安居客这种网站的价格并不是很准,但是一旦有了历史数据,那分析起来还是可以得到点相关的信息的。分析的结果如下展示:

http://beijing.anjuke.com/viewprop-act-sell-id-34033853.html 13366569581 南北 美联物业 亚运新新家园朗月园 1450万元 5室3厅 365平米 39726元 共3层 2008
http://beijing.anjuke.com/viewprop-act-sell-id-34033627.html 13161862633 南北 润万嘉 远洋·万和城 760万元 3室1厅 163平米 46626元 8/12 2005 

第一列为房子的具体链接地址,第2列为销售的手机号,第3列为房子的朝向,第4列为中介公司,第5列为楼盘名字,第6列为总价,第七列为户型,第8列为楼层,第9列为房子年代

具体的shell脚本如下,得到的最后csv文件可以用excel或者python matlab进行画图。

#!/bin/bash
cd /home/timo/house

day=`date +%F-%H:%M`
today=`date +%F`
wget --header="Host: beijing.anjuke.com" --user-agent=Mozilla/5.0 http://203.166.162.82/v2/sale/W0QQdsmZmmQQmodeZ1QQs5Zall -O anjuke.txt

grep "房龄\|viewprop-act-sell-id" anjuke.txt | grep -v option &gt; result.txt

sed '{N;s/\n/ /}' -i result.txt

if [ ! -f today.anjuke.$today.csv ] ;
then
	touch today.anjuke.$today.csv
fi

templink=`awk -F'"' '{print $2}' result.txt | tail -n 1`
tempid=`grep -c "$templink" today.anjuke.$today.csv`

if [ $tempid -le 0 ] ;  then
	echo "$day" &gt;&gt; today.anjuke.$today.csv
	awk '{print $2,$3,$11}' result.txt  | awk -F'"' '{print $2,$4,$5}' | sed 's#<em>\|</em>\|,\|单价:\|楼层:\|房龄:# #g' | sort -k 5 &gt;&gt; today.anjuke.$today.csv
fi

sed -e 's#二手房# #g' -i today.anjuke.$today.csv


for linenum in {1..25}
do
temp_phone=`awk '{print $2}' today.anjuke.$today.csv | tail -n 25 |  sed -n "$linenum"p| egrep "^[0-9]+" | wc -l`
if [ $temp_phone -le 0 ] ;
then
	for x in `awk '{print $1}' today.anjuke.$today.csv | tail -n 25 | sed -n "$linenum"p`
	do
		wget --user-agent=Mozilla/5.0 $x -O phone.txt
		phone=`egrep -e '"telphone"&gt;[0-9]+' phone.txt  | sed -e 's#<div class="telphone">\|</div>\|\t##g'`
		orien=`grep '朝向'  phone.txt  | grep -w li | sed -r 's#[a-z]||"|\/|=|\t|朝向:##g'`
		shop=`grep 'images.anjukestatic.com/broker' phone.txt  | awk -F'"' '{print $12}' | awk '{print $1}'`
		sed -e "s#$x#$x $phone $orien $shop#g" -i today.anjuke.$today.csv
	done
fi
done

计算所有房子总价的平均价格,不算不知道,一算吓我一跳阿

awk 'NF > 10' today.anjuke.2010-08-24.csv | awk '{print $6}' | awk -F'万元' '{print $1}' | awk 'BEGIN {sum=0} {sum+=$0} END{print sum/FNR}'
283.187

好了,其它的也就依样画葫芦计算拉。发现awk太强大了。

###########################################

Best regards
Timo Seven
blog: http://www.timoseven.com
twitter: http://twitter.com/zauc
Linux System Admin & MySQL DBA

shell常用资料(备查)

While的使用

while read line
do
       mysql ab -e "insert into filter values (null,'$line','xxxxxxxx','xxxxxxxx',1,8,1,1,188,'abc')"
done = '"$sunday"%' and time >files/blog_we
ek_num
                done
   fi
  done

上面做了2次for语句,第一次表示i从1-7,而第二次a是从1-99.上面第一个for语句是为了查询今天是否为星期天而产生的。

一个用shell完成的统计程序

要是shell里能进行很好的循环就好了。以及shell最不容易控制的就是’,”,`这3个标点符号的区别。`这个倒是比较简单,就是在shell里只是表示运行外部程序。”和’这个如果单独使用是没有任何问题的,但是一旦要配合使用就区分起来十分麻烦。

这个日志统计程序中总共用了500多行,先定义30个日期。这个要是能用循环就非常简单了。但是我还是用比较傻的一个个来进行定义。


day=`date -d -1days +%F`

 day_1=`date -d -2days +%F`

这里要是能够使用的数组来进行定义就非常简单了。


for i in {2..30}

do

eval day_$i=`date -d -"$i"days +%F`

eval echo \$day_$i

done

 

通过上面就可以进行循环定义了。

这里需要定义和引用变量的过程比较多,一个数据往往要转换多次才可以得到最后真实的数据,这里一共进行了4次数据的赋值工作加一次if判断工作。还好现在总的执行时间还在0.02秒以内完成。不然就必须得修改这样一个程序了。


login_user=`mysql -h$db -u$dbuser -p$dbpass -e "select distinct id from test.iplog where time like '"$day"%'" |sed -n '2,$'p > login_user.diff`

这个是用来统计今天有哪些用户登陆过了系统,并把结果写入到login_user.diff中


reg_30_user=`mysql -h$db -u$dbuser -p$dbpass -e "select id from test.user_desc where registertime like '"$day_30"%'" | sed -n '2,$'p > reg_30_user.diff && cat login_user.diff >> reg_30_user.diff`

这里在数据库中进行一次like操作,这个其实是很费时间的如果条数过多的话。查询出来通过sed来取出用户名到一个文件中同时跟今天的登录用户名进行合并。


login_user_number=`mysql -h$db -u$dbuser -p$dbpass -e "select count(distinct id) from test.iplog where time like '"$day"%'" | sed -n '2'p`

这个是用来统计今天登陆过系统的用户数。


num_30_reg=`cat reg_30_user.diff | sort | uniq -d | wc -l`

这个用来统计前面第30天注册的用户在今天到底有多少人登陆了。这个其实是可以跟上面这个语句进行合并的,但是怎么都测试不通过。也考虑过用select in操作来进行,首先是要进行行列转换


uniq_30_user=`mysql -h$db -u$dbuser -p$dbpass -e "select count(distinct id) from test.user_desc where registertime like  '"$day_30"%'" | sed -n '2'p`

计算那天的注册用户数量。这样根据前面2个数据可以知道注册用户的实际登陆频率是怎么样的。


if  [ $uniq_30_user -eq 0 -o $num_30_reg -eq 0 ];

then

per_30=0.00

else

per_30=`awk 'BEGIN {x='"$num_30_reg"';y='"$uniq_30_user"';printf "%.2f\n",x/y}'`

echo $per_30

fi;

首先是判断过去某一天的注册用户数是否为0,以及那天的注册用户在今天登陆数是否0,在shell中,除法的两边都不能为0,这个还跟普通的公式不同。如果2个数都为0,那直接赋值0.00给它,不然就进行除法运算,并保留2位小数。这个表达式的单引号双引号可是困惑了整整一天时间。

最后就是mysql插入的语句,把这30个数据最后按照一定的规律插入到表中就可以了。