windows10文件资源管理器打开时显示此电脑

⭐ 我的网站: www.mengyingjie.com ⭐ windows7、windows打开资源管理器时显示“我的电脑”,而到windows10之后打开资源管理时显示为“快速启动”,要想打开资源管理器显示我的电脑,需要设置才可以。方法/步骤 1.第一步,打开文件资源管理器: 2.第二步,文件资源管理器下的导航栏上点击"查看" ==> "选项"进入设置: 3.在选项卡的最上面有一个下拉列表选择“此电脑”,windows10文件资源管理器打开时就显示此电脑 遇到此类问题,但看了文章还是未解决,评论或加 QQ:781378815

September 9, 2019 · 1 min · jiezi

mysql高级使用和技巧

文章来源:www.liangsonghua.me作者介绍:京东资深工程师-梁松华,长期关注稳定性保障、敏捷开发、JAVA高级、微服务架构 一、普通索引和唯一索引查询上来说,普通索引查找到满足条件的记录后会接着查找下一个记录(innodb的数据是按页读写的),判断是否满足。然而唯一索引是查询到了就立即返回了。所以如果你明确知道只有一条结果则应该加上limit 1 更新上来说,普通索引会用到charge buffer优化,将更新操作记录在charge buffer中,不需要从磁盘中读取数据然后再更新,当下次查询该数据页时再读入内存然后执行merge相关操作,更新原数据。 二、前缀索引查询上来说,前缀索引可能会导致在索引树上命中率变高但是原数据命中并不一定高,造成了一定的查询浪费。另外对于索引上的信息足够满足查询条件的情况下,前缀索引会多一次回表操作,整体索引则是直接返回(也就是覆盖索引)。 但是如果提高数据的区分度,比如倒序存储、hash处理后存储等,使用前缀索引存储空间更小,查询次数也不会太差,收益可能会更高。 三、联合索引对于联合索引来说,遵守最左前缀原则,也就是说如果只有idx-union(type,time,value)联合索引,单纯的type或者type and time作来查询条件也会命中这条索引,但是单纯value作为查询条件则无法命中。另外如果存在范围查询比如between等也会导致无法命中 四、收缩表空间当需要收缩表空间时,如果只是delete数据,表文件大小是不变的,会被mysql标记为可复用的空间,需要通过alter重建表才能释放。当然如果是要删除全部数据的话,首选应该是Truncate操作。 五、count(*)操作InnoDb是索引组织表,主键索引树的叶子节点存的是整行数据,而普通索引树的叶子节点是主键值(需要先查找k索引树得到ID,然后再到ID索引树查找,也就是回表),不管是优化器查询哪个索引树或者不使用索引,都需要将所有数据查出来然后累加返回,所以不推荐在innodb引擎的数据库中频繁执行count(*)操作。 六、显示随机信息如果使用order by rand()实现,则需要在临时表上进行rowid(有主键则是主键没有则是系统生成标识行的rowid)排序操作,整体过程涉及全表扫描然后将数据放到内存临时表再生成sort_buffer排序再从内存临时表中取数据。如果sort_buffer_size无法存储数据,则需要使用磁盘文件进行分块存储然后再归并排序。 正确的方式应该是: mysql> select count(*) into @C from t;set @Y1 = floor(@C * rand());set @Y2 = floor(@C * rand());set @Y3 = floor(@C * rand());select * from t limit @Y1,1; // 在应用代码里面取 Y1、Y2、Y3 值,拼出 SQL 后执行select * from t limit @Y2,1;select * from t limit @Y3,1; 七、where条件上不要使用函数对索引字段做函数操作,可能会破坏索引值的有序性,因为b+树中的同一层兄弟节点是有序的 八、where条件不要使用类型转换当字符串和数字做比较时,会将字符串转换成数字,会触发CAST等函数操作,触发上一条规则 九、数据库用错索引时可以强制force index我们知道Mysql结合扫描行数、是否使用临时表、是否需要排序等综合考虑选择索引,当然就会出现用错索引的情况。平时我们explain sql时显示的预估扫描行数rows是mysql通过数据采样,选择这个索引其中n个数据页,统计这些页面的不同值,得到平均值,然后乘以这个索引的页面数,得到基数,也就是区分度。另外还有如果回表代价过大,也可能会选错索引。 十、join操作join操作的过程是先遍历表t1,然后根据从表t1取中的数据到表t2中查找满足条件的记录,也就是说驱动表是走全表扫描,而被驱动表是走树查找(index nested-loop join)。那么理所当然选择小表(过滤后)作为驱动表效果更好。 ...

July 11, 2019 · 1 min · jiezi

Webpack-技巧-联合-alias-和-mainFields-提高多库联调效率

1、多库联调场景目前在开发一个工程项目,考虑到可扩展性和功能解耦,将每个功能模块都单独拆分出来。在正式使用、单独维护某个功能包的时候没什么问题,最为头疼的是联调两个功能模块的时候,就比较掣肘了。 我们举下面的场景为例来说明: 工程项目中有 A、B、C 这 3 个功能模块,每个功能模块都是单独的一个 npm 包;其中 A 是基础工具包,B、C 是业务功能模块;C 包依赖 A 包的功能工程目录及引用关系如下图所示: 1.1、联调的难题当我们开发 C 模块的时候,需要 同时联调 A 模块的功能,而由于 A 模块是以 npm 包放在在 node_modules 中,所以我们直接修改 A 模块并没有什么用,修改的效果并不会出现的 C 模块的调试内容中。 1.2、通常的解决方案通常我们的解决方法是采用 npm link 方式解决:先在 A 模块下执行 npm link;然后去 C 模块中执行 npm link A,这样我们就能方便联调这两个模块。 然而这种 npm link 的方式在某些场景还是有限制: 如果你使用 Typescript 开发,npm link 后有可能会报错找不到 A 模块中的 xx 类型定义;这个目前我也没有找到好的解决方案。。。如果 A 包只以压缩版本发行(即 dist 目录只存 index.min.js 文件),那么你每次修改 A 文件后必须手动打包一次,那么 C 模块才会感知文件的变化触发 hot reload如果没有上述这两个问题,我以往我都直接使用 npm link 的方式联合开发,联调地也是蛮开心的。 ...

July 7, 2019 · 1 min · jiezi

修改AndroidStudio缓存目录

文章首发自公众号: nullobject 。个人站点:https://www.nullobject.cn这篇文章主要介绍如何修改Android Studio缓存目录1 说明修改Android Studio缓存目录,主要是修改.AndroidStudio文件夹和m2文件夹所在目录。.AndroidStudio主要用于保存AS的配置以及插件。默认情况下,.AndroidStudio 默认的目录位于C盘系统用户文件夹下: AS默认会为每个版本都生成一个.AndroidStudio目录,当然这可以在安装和更新AS时指定。m2文件夹为AS本地仓库缓存,在使用远程仓库时会先缓存到本地的仓库之后才添加到项目。这两个文件夹会随着使用日渐膨胀,占用C盘空间,因此C盘容量小的朋友可以通过这个方法转移AS缓存目录以减缓系统盘压力。 开始配置之前,建议先关闭所有Android Studio实例。Android Studio基于IntelliJ IDEA开发,可以通过修改Android Studio可执行文件目录下的idea.properties文件实现修改缓存目录。该方法理论上同样适用于修改JetBrains家其他的软件缓存目录。备份idea.properties文件开始配置之前,建议备份一份原始的idea.properties文件,以确保发生意外时候能够快速地恢复原有配置(相信细心的Coder们不会犯这种错误)。 2 修改idea.properties如果您是初次修改idea.properties,建议先熟悉该属性文件中的配置选项,一定程度上这也能够达到知其所以然的效果。idea.properties部分内容如下: 图中箭头所指的内容就是用于修改AS缓存目录的四个选项。可以看到,被注释掉的这四个选项即AS默认的缓存目录配置,要修改AS缓存目录为指定的目录,只需要去掉这四句的注释,并修改为目标路径即可。例如,笔者希望将AS缓存目录修改为D:/Android/.AndroidStudio目录,可以按以下方式修改: 修改完成后保存并关闭文件,重启Android Studio既可生效。 注意:修改完成后,重新打开AS会出现配置引导界面让用户重新配置。想沿用原有的配置,只需要将旧的缓存目录内容复制到新的路径下即可: 3 修改m2文件夹m2文件夹默认的路径为C:/Users/username/.m2 ,其中username即系统用户名。将m2文件夹复制到新的缓存目录下,例如D:/Android。接下来需要打开AndroidStudio配置其路径的环境变量: 配置好之后,重启AS生效。

June 19, 2019 · 1 min · jiezi

jsPDF-实现-Google-云端硬盘只读-PDF-文件下载导出

背景https://www.savemyexams.co.uk 蜜汁刷题网站,会员简直就是在抢钱好不容易搞了个教师折扣,试卷资源还不能下载…本方法适用于 Google Drive 被设置为 Read Only 的 PDF 文件的下载导出 代码/* Via https://codingcat.codes/2019/01/09/download-view-protected-pdf-google-drive-js-code/ If the images are not complete, try zooming the page to get the full image. 1. Open Developer Tools on separate window and choose the Console tab 2. Paste the code below (and hit enter)*/let jspdf = document.createElement("script"); jspdf.onload = function () { let pdf = new jsPDF(); let elements = document.getElementsByTagName("img"); for (let i in elements) { let img = elements[i]; if (!/^blob:/.test(img.src)) { continue; } let can = document.createElement('canvas'); let con = can.getContext('2d'); can.width = img.width; can.height = img.height; con.drawImage(img, 0, 0); let imgData = can.toDataURL("image/jpeg", 1.0); pdf.addImage(imgData, 'JPEG', 0, 0); pdf.addPage(); } pdf.save(document.title.split('.pdf - ')[0]+".pdf");}; jspdf.src = 'https://cdn.bootcss.com/jspdf/1.5.3/jspdf.debug.js';document.body.appendChild(jspdf);↑ JavaScript 代码 ...

May 1, 2019 · 1 min · jiezi

30秒的PHP代码片段(3)字符串-String & 函数-Function

本文来自GitHub开源项目点我跳转30秒的PHP代码片段精选的有用PHP片段集合,您可以在30秒或更短的时间内理解这些片段。字符串endsWith判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回true,否则返回false。function endsWith($haystack, $needle){ return strrpos($haystack, $needle) === (strlen($haystack) - strlen($needle));}ExamplesendsWith(‘Hi, this is me’, ‘me’); // truefirstStringBetween返回参数start和end中字符串之间的第一个字符串。function firstStringBetween($haystack, $start, $end){ return trim(strstr(strstr($haystack, $start), $end, true), $start . $end);}ExamplesfirstStringBetween(‘This is a [custom] string’, ‘[’, ‘]’); // customisAnagram检查一个字符串是否是另一个字符串的变位元(不区分大小写,忽略空格、标点符号和特殊字符)。就是所谓的字谜function isAnagram($string1, $string2){ return count_chars($string1, 1) === count_chars($string2, 1);}ExamplesisAnagram(‘fuck’, ‘fcuk’); // trueisAnagram(‘fuckme’, ‘fuckyou’); // falseisLowerCase如果给定字符串是小写的,则返回true,否则返回false。function isLowerCase($string){ return $string === strtolower($string);}ExamplesisLowerCase(‘Morning shows the day!’); // falseisLowerCase(‘hello’); // trueisLowerCase如果给定字符串为大写,则返回true,否则返回false。function isUpperCase($string){ return $string === strtoupper($string);}ExamplesisUpperCase(‘MORNING SHOWS THE DAY!’); // trueisUpperCase(‘qUick Fox’); // falsepalindrome如果给定字符串是回文,则返回true,否则返回false。回文,顾名思义,即从前往后读和从后往前读是相等的function palindrome($string){ return strrev($string) === (string) $string;}Examplespalindrome(‘racecar’); // truepalindrome(2221222); // truestartsWith检查字符串是否是以指定子字符串开头,如果是则返回true,否则返回false。function startsWith($haystack, $needle){ return strpos($haystack, $needle) === 0;}ExamplesstartsWith(‘Hi, this is me’, ‘Hi’); // truecountVowels返回给定字符串中的元音数。使用正则表达式来计算字符串中元音(A, E, I, O, U)的数量。function countVowels($string){ preg_match_all(’/[aeiou]/i’, $string, $matches); return count($matches[0]);}ExamplescountVowels(‘sampleInput’); // 4decapitalize使字符串的第一个字母去大写。对字符串的第一个字母进行无头化,然后将其与字符串的其他部分相加。省略upperRest参数以保持字符串的其余部分完整,或将其设置为true以转换为大写。function decapitalize($string, $upperRest = false){ return lcfirst($upperRest ? strtoupper($string) : $string);}Examplesdecapitalize(‘FooBar’); // ‘fooBar’isContains检查给定字符串输入中是否存在单词或者子字符串。使用strpos查找字符串中第一个出现的子字符串的位置。返回true或false。function isContains($string, $needle){ return strpos($string, $needle);}ExamplesisContains(‘This is an example string’, ’example’); // trueisContains(‘This is an example string’, ‘hello’); // false函数compose返回一个将多个函数组合成单个可调用函数的新函数。function compose(…$functions){ return array_reduce( $functions, function ($carry, $function) { return function ($x) use ($carry, $function) { return $function($carry($x)); }; }, function ($x) { return $x; } );}…为可变数量的参数,http://php.net/manual/zh/func…Examples$compose = compose( // add 2 function ($x) { return $x + 2; }, // multiply 4 function ($x) { return $x * 4; });$compose(3); // 20memoize创建一个会缓存func结果的函数,可以看做是全局函数。function memoize($func){ return function () use ($func) { static $cache = []; $args = func_get_args(); $key = serialize($args); $cached = true; if (!isset($cache[$key])) { $cache[$key] = $func(…$args); $cached = false; } return [‘result’ => $cache[$key], ‘cached’ => $cached]; };}Examples$memoizedAdd = memoize( function ($num) { return $num + 10; });var_dump($memoizedAdd(5)); // [‘result’ => 15, ‘cached’ => false]var_dump($memoizedAdd(6)); // [‘result’ => 16, ‘cached’ => false]var_dump($memoizedAdd(5)); // [‘result’ => 15, ‘cached’ => true]curry(柯里化)把函数与传递给他的参数相结合,产生一个新的函数。function curry($function){ $accumulator = function ($arguments) use ($function, &$accumulator) { return function (…$args) use ($function, $arguments, $accumulator) { $arguments = array_merge($arguments, $args); $reflection = new ReflectionFunction($function); $totalArguments = $reflection->getNumberOfRequiredParameters(); if ($totalArguments <= count($arguments)) { return $function(…$arguments); } return $accumulator($arguments); }; }; return $accumulator([]);}Examples$curriedAdd = curry( function ($a, $b) { return $a + $b; });$add10 = $curriedAdd(10);var_dump($add10(15)); // 25once只能调用一个函数一次。function once($function){ return function (…$args) use ($function) { static $called = false; if ($called) { return; } $called = true; return $function(…$args); };}Examples$add = function ($a, $b) { return $a + $b;};$once = once($add);var_dump($once(10, 5)); // 15var_dump($once(20, 10)); // nullvariadicFunction(变长参数函数)变长参数函数允许使用者捕获一个函数的可变数量的参数。函数接受任意数量的变量来执行代码。它使用for循环遍历参数。function variadicFunction($operands){ $sum = 0; foreach($operands as $singleOperand) { $sum += $singleOperand; } return $sum;}ExamplesvariadicFunction([1, 2]); // 3variadicFunction([1, 2, 3, 4]); // 10相关文章:30秒的PHP代码片段(1)数组 - Array30秒的PHP代码片段(2)数学 - Math ...

February 19, 2019 · 2 min · jiezi

30秒的PHP代码片段(2)数学 - Math

本文来自GitHub开源项目点我跳转30秒的PHP代码片段精选的有用PHP片段集合,您可以在30秒或更短的时间内理解这些片段。数学函数average返回两个或多个数字的平均值。function average(…$items){ $count = count($items); return $count === 0 ? 0 : array_sum($items) / $count;}Examplesaverage(1, 2, 3); // 2factorial(阶乘)计算一个数的阶乘。function factorial($n){ if ($n <= 1) { return 1; } return $n * factorial($n - 1);}Examplesfactorial(6); // 720fibonacci(斐波那契数列)生成包含斐波那契数列的数组,直到第n项。function fibonacci($n){ $sequence = [0, 1]; for ($i = 2; $i < $n; $i++) { $sequence[$i] = $sequence[$i-1] + $sequence[$i-2]; } return $sequence;}Examplesfibonacci(6); // [0, 1, 1, 2, 3, 5]GCD(最大公约数)计算两个或多个数之间的最大公约数。function gcd(…$numbers){ if (count($numbers) > 2) { return array_reduce($numbers, ‘gcd’); } $r = $numbers[0] % $numbers[1]; return $r === 0 ? abs($numbers[1]) : gcd($numbers[1], $r);}Examplesgcd(8, 36); // 4gcd(12, 8, 32); // 4isEven如果给定的数字是偶数,则返回true,否则返回false。function isEven($number){ return ($number % 2) === 0;}ExamplesisEven(4); // trueisPrime检查提供的整数是否是素数。function isPrime($number){ $boundary = floor(sqrt($number)); for ($i = 2; $i <= $boundary; $i++) { if ($number % $i === 0) { return false; } } return $number >= 2;}ExamplesisPrime(3); // truelcm返回两个或多个数字的最小公倍数。function lcm(…$numbers){ $ans = $numbers[0]; for ($i = 1, $max = count($numbers); $i < $max; $i++) { $ans = (($numbers[$i] * $ans) / gcd($numbers[$i], $ans)); } return $ans;}Exampleslcm(12, 7); // 84lcm(1, 3, 4, 5); // 60median返回数字数组的中间值。function median($numbers){ sort($numbers); $totalNumbers = count($numbers); $mid = floor($totalNumbers / 2); return ($totalNumbers % 2) === 0 ? ($numbers[$mid - 1] + $numbers[$mid]) / 2 : $numbers[$mid];}Examplesmedian([1, 3, 3, 6, 7, 8, 9]); // 6median([1, 2, 3, 6, 7, 9]); // 4.5maxN从提供的数组中返回最大的数的个数。function maxN($numbers){ $maxValue = max($numbers); $maxValueArray = array_filter($numbers, function ($value) use ($maxValue) { return $maxValue === $value; }); return count($maxValueArray);}ExamplesmaxN([1, 2, 3, 4, 5, 5]); // 2maxN([1, 2, 3, 4, 5]); // 1minN从提供的数组中返回最小的数的个数。function minN($numbers){ $minValue = min($numbers); $minValueArray = array_filter($numbers, function ($value) use ($minValue) { return $minValue === $value; }); return count($minValueArray);}ExamplesminN([1, 1, 2, 3, 4, 5, 5]); // 2minN([1, 2, 3, 4, 5]); // 1approximatelyEqual(约等于)检查两个数字是否近似相等。使用abs()将两个值的绝对值与进行比较。省略第三个参数,以便使用默认值0.001。function approximatelyEqual($number1, $number2, $epsilon = 0.001){ return abs($number1 - $number2) < $epsilon;}ExamplesapproximatelyEqual(10.0, 10.00001); // trueapproximatelyEqual(10.0, 10.01); // falseclampNumber将num放在边界值a和b指定的包含范围内。如果num在该范围内,则返回num。否则,返回该范围内最近的数字。function clampNumber($num, $a, $b){ return max(min($num, max($a, $b)), min($a, $b));}ExamplesclampNumber(2, 3, 5); // 3clampNumber(1, -1, -5); // -1相关文章:30秒的PHP代码片段(1)数组 - Array ...

February 18, 2019 · 2 min · jiezi

30秒的PHP代码片段(1)数组 - Array

本文来自GitHub开源项目点我跳转30秒的PHP代码片段精选的有用PHP片段集合,您可以在30秒或更短的时间内理解这些片段。排列all如果所提供的函数返回 true 的数量等于数组中成员数量的总和,则函数返回 true,否则返回 false。function all($items, $func){ return count(array_filter($items, $func)) === count($items);}Examplesall([2, 3, 4, 5], function ($item) { return $item > 1;}); // trueany如果提供的函数对数组中的至少一个元素返回true,则返回true,否则返回false。function any($items, $func){ return count(array_filter($items, $func)) > 0;}Examplesany([1, 2, 3, 4], function ($item) { return $item < 2;}); // truedeepFlatten(深度平铺数组)将多维数组转为一维数组function deepFlatten($items){ $result = []; foreach ($items as $item) { if (!is_array($item)) { $result[] = $item; } else { $result = array_merge($result, deepFlatten($item)); } } return $result;}ExamplesdeepFlatten([1, [2], [[3], 4], 5]); // [1, 2, 3, 4, 5]drop返回一个新数组,并从左侧弹出n个元素。function drop($items, $n = 1){ return array_slice($items, $n);}Examplesdrop([1, 2, 3]); // [2,3]drop([1, 2, 3], 2); // [3]findLast返回所提供的函数为其返回的有效值(即过滤后的值)的最后一个元素的键值(value)。function findLast($items, $func){ $filteredItems = array_filter($items, $func); return array_pop($filteredItems);}ExamplesfindLast([1, 2, 3, 4], function ($n) { return ($n % 2) === 1;});// 3findLastIndex返回所提供的函数为其返回的有效值(即过滤后的值)的最后一个元素的键名(key)。function findLastIndex($items, $func){ $keys = array_keys(array_filter($items, $func)); return array_pop($keys);}ExamplesfindLastIndex([1, 2, 3, 4], function ($n) { return ($n % 2) === 1;});// 2flatten(平铺数组)将数组降为一维数组function flatten($items){ $result = []; foreach ($items as $item) { if (!is_array($item)) { $result[] = $item; } else { $result = array_merge($result, array_values($item)); } } return $result;}Examplesflatten([1, [2], 3, 4]); // [1, 2, 3, 4]groupBy根据给定的函数对数组的元素进行分组。function groupBy($items, $func){ $group = []; foreach ($items as $item) { if ((!is_string($func) && is_callable($func)) || function_exists($func)) { $key = call_user_func($func, $item); $group[$key][] = $item; } elseif (is_object($item)) { $group[$item->{$func}][] = $item; } elseif (isset($item[$func])) { $group[$item[$func]][] = $item; } } return $group;}ExamplesgroupBy([‘one’, ’two’, ’three’], ‘strlen’); // [3 => [‘one’, ’two’], 5 => [’three’]]hasDuplicates(查重)检查数组中的重复值。如果存在重复值,则返回true;如果所有值都是唯一的,则返回false。function hasDuplicates($items){ return count($items) > count(array_unique($items));}ExampleshasDuplicates([1, 2, 3, 4, 5, 5]); // truehead返回数组中的第一个元素。function head($items){ return reset($items);}Exampleshead([1, 2, 3]); // 1last返回数组中的最后一个元素。function head($items){ return reset($items);}Exampleslast([1, 2, 3]); // 3pluck检索给定键名的所有键值function pluck($items, $key){ return array_map( function($item) use ($key) { return is_object($item) ? $item->$key : $item[$key]; }, $items);}Examplespluck([ [‘product_id’ => ‘prod-100’, ’name’ => ‘Desk’], [‘product_id’ => ‘prod-200’, ’name’ => ‘Chair’],], ’name’);// [‘Desk’, ‘Chair’]pull修改原始数组以过滤掉指定的值。function pull(&$items, …$params){ $items = array_values(array_diff($items, $params)); return $items;}Examples$items = [‘a’, ‘b’, ‘c’, ‘a’, ‘b’, ‘c’];pull($items, ‘a’, ‘c’); // $items will be [‘b’, ‘b’]reject使用给定的回调筛选数组。function reject($items, $func){ return array_values(array_diff($items, array_filter($items, $func)));}Examplesreject([‘Apple’, ‘Pear’, ‘Kiwi’, ‘Banana’], function ($item) { return strlen($item) > 4;}); // [‘Pear’, ‘Kiwi’]remove从给定函数返回false的数组中删除元素。function remove($items, $func){ $filtered = array_filter($items, $func); return array_diff_key($items, $filtered);}Examplesremove([1, 2, 3, 4], function ($n) { return ($n % 2) === 0;});// [0 => 1, 2 => 3]tail返回数组中的所有元素,第一个元素除外。function tail($items){ return count($items) > 1 ? array_slice($items, 1) : $items;}Examplestail([1, 2, 3]); // [2, 3]take返回一个数组,其中从开头删除了n个元素。function take($items, $n = 1){ return array_slice($items, 0, $n);}Examplestake([1, 2, 3], 5); // [1, 2, 3]take([1, 2, 3, 4, 5], 2); // [1, 2]without筛选出给定值之外的数组元素。function without($items, …$params){ return array_values(array_diff($items, $params));}Exampleswithout([2, 1, 2, 3, 5, 8], 1, 2, 8); // [3, 5]orderBy按键名对数组或对象的集合进行排序。function orderBy($items, $attr, $order){ $sortedItems = []; foreach ($items as $item) { $key = is_object($item) ? $item->{$attr} : $item[$attr]; $sortedItems[$key] = $item; } if ($order === ‘desc’) { krsort($sortedItems); } else { ksort($sortedItems); } return array_values($sortedItems);}ExamplesorderBy( [ [‘id’ => 2, ’name’ => ‘Joy’], [‘id’ => 3, ’name’ => ‘Khaja’], [‘id’ => 1, ’name’ => ‘Raja’] ], ‘id’, ‘desc’); // [[‘id’ => 3, ’name’ => ‘Khaja’], [‘id’ => 2, ’name’ => ‘Joy’], [‘id’ => 1, ’name’ => ‘Raja’]] ...

February 13, 2019 · 3 min · jiezi

一份关于kaggle特征构建技巧和心得

摘要: 本文是一份关于如何在Kaggle排行榜上取得出色成绩的提示,包含经纬度数据的处理。在很长的一段时间里,我们表现出缺乏创造力,所做出的工作被认为是山寨、借鉴,这一点是不可否认,但随着自身的积累,厚积薄发,完成了从借鉴到创造的突破。创造力是我们工作的基本要素之一,这点在各行各业都显得很重要,在机器学习领域也无所例外。创建特征也需要创造力,因此本文在这里列出了我日常生活中的一些想法,希望对其它人有些启发,以至于能够在此基础上利用创造力在Kaggle排行榜上取得很好的成绩。这篇文章的灵感来自于 Beluga在Kaggle上分享的文章,本文部分内容是直接摘自该文章中,因此,读者也可以看看这篇文章。以下是分享的正文:1.当不需要时,不要尝试预测未来:如果训练/测试都来自同一时间线,那么就可以非常巧妙地使用特性。虽然这只是一个kaggle的案例,但可以利用这个优势。例如:在出租车出行持续时间挑战赛中,从训练数据中随机抽取测试数据。在这种情况下,可以使用不同类别变量的平均目标变量作为特征。在这种情况下, Beluga 实际上使用了不同工作日的平均目标变量。然后,将相同的平均值映射为一个变量,并将其映射到测试数据中。2. logloss裁剪技术:这部分内容是在Jeremy Howard的神经网络课程中学到的内容,它基于一个非常简单的想法。如果我们非常自信和不公正的,Logloss会受到很多惩罚。因此,在必须预测概率的分类问题情况下,将概率剪切在0.05-0.95之间会好得多,这样就对自己的预测变得不是十分确定。3.以gzip格式提交到kaggle: 下面一小段代码可以帮助我们节省无数的上传时间:df.to_csv(‘submission.csv.gz’, index=False, compression=‘gzip’)4.如何最好地使用纬度和经度特征——第1部分:在Beluga写的文章中,我最喜欢的一部分内容之一就是他如何使用经纬度(Lat / Lon)数据,这里创建了以下特征:A.两个经纬度之间的Haversine距离:def haversine_array(lat1, lng1, lat2, lng2): lat1, lng1, lat2, lng2 = map(np.radians, (lat1, lng1, lat2, lng2)) AVG_EARTH_RADIUS = 6371 # in km lat = lat2 - lat1 lng = lng2 - lng1 d = np.sin(lat * 0.5) ** 2 + np.cos(lat1) * np.cos(lat2) * np.sin(lng * 0.5) ** 2 h = 2 * AVG_EARTH_RADIUS * np.arcsin(np.sqrt(d)) return hB.两个经纬度之间的曼哈顿距离:def dummy_manhattan_distance(lat1, lng1, lat2, lng2): a = haversine_array(lat1, lng1, lat1, lng2) b = haversine_array(lat1, lng1, lat2, lng1) return a + bC.两个经纬度之间的方位:def bearing_array(lat1, lng1, lat2, lng2): AVG_EARTH_RADIUS = 6371 # in km lng_delta_rad = np.radians(lng2 - lng1) lat1, lng1, lat2, lng2 = map(np.radians, (lat1, lng1, lat2, lng2)) y = np.sin(lng_delta_rad) * np.cos(lat2) x = np.cos(lat1) * np.sin(lat2) - np.sin(lat1) * np.cos(lat2) * np.cos(lng_delta_rad) return np.degrees(np.arctan2(y, x))D.取放点之间的中心纬度和经度:train.loc[:, ‘center_latitude’] = (train[‘pickup_latitude’].values + train[‘dropoff_latitude’].values) / 2train.loc[:, ‘center_longitude’] = (train[‘pickup_longitude’].values + train[‘dropoff_longitude’].values) / 25.如何最好地使用经纬度特征——第2部分:在Beluga写的文章中,他使用经纬度数据的第二种方式是为取放点的经纬度创建集群,它的工作方式是通过设计在数据中创建了一些行政区。from sklearn.cluster import MiniBatchKMeanscoords = np.vstack((train[[‘pickup_latitude’, ‘pickup_longitude’]].values, train[[‘dropoff_latitude’, ‘dropoff_longitude’]].values, test[[‘pickup_latitude’, ‘pickup_longitude’]].values, test[[‘dropoff_latitude’, ‘dropoff_longitude’]].values))sample_ind = np.random.permutation(len(coords))[:500000]kmeans = MiniBatchKMeans(n_clusters=100, batch_size=10000).fit(coords[sample_ind])train.loc[:, ‘pickup_cluster’] = kmeans.predict(train[[‘pickup_latitude’, ‘pickup_longitude’]])train.loc[:, ‘dropoff_cluster’] = kmeans.predict(train[[‘dropoff_latitude’, ‘dropoff_longitude’]])test.loc[:, ‘pickup_cluster’] = kmeans.predict(test[[‘pickup_latitude’, ‘pickup_longitude’]])test.loc[:, ‘dropoff_cluster’] = kmeans.predict(test[[‘dropoff_latitude’, ‘dropoff_longitude’]])然后,他使用这些集群创建了一些特征,例如比如计算某一天外出和入境的次数。6.如何最好地使用纬度和经度特征——第3部分在Beluga写的文章中,还使用了PCA方法来转换经度和纬度坐标。在这种情况下,它不是进行降维,而是进行了坐标的变换,2D—>2D变换,它实际上做了如下操作。pca = PCA().fit(coords)train[‘pickup_pca0’] = pca.transform(train[[‘pickup_latitude’, ‘pickup_longitude’]])[:, 0]train[‘pickup_pca1’] = pca.transform(train[[‘pickup_latitude’, ‘pickup_longitude’]])[:, 1]train[‘dropoff_pca0’] = pca.transform(train[[‘dropoff_latitude’, ‘dropoff_longitude’]])[:, 0]train[‘dropoff_pca1’] = pca.transform(train[[‘dropoff_latitude’, ‘dropoff_longitude’]])[:, 1]test[‘pickup_pca0’] = pca.transform(test[[‘pickup_latitude’, ‘pickup_longitude’]])[:, 0]test[‘pickup_pca1’] = pca.transform(test[[‘pickup_latitude’, ‘pickup_longitude’]])[:, 1]test[‘dropoff_pca0’] = pca.transform(test[[‘dropoff_latitude’, ‘dropoff_longitude’]])[:, 0]test[‘dropoff_pca1’] = pca.transform(test[[‘dropoff_latitude’, ‘dropoff_longitude’]])[:, 1]7.不要忘记可以用特征做的正常事情:按Max-Min缩放;使用标准偏差进行标准化;基于特征/目标的日志:使用基于特征或基于目标特征的日志;热编码;8.创建直观的附加特征:A)日期时间特征:基于时间的特征,如“晚上”、“中午”、“夜晚”、“上月购买行为”,“上周购买行为”等;B)思想特征:假设有购物车数据,并且想要对行程进行分类(参阅Walmart Recruiting:Kaggle的行程类型分类);此外,还可以考虑创建一个像“时尚”这样的特征,可以通过添加属于男装时尚、女装时尚、青少年时尚类别的项目来创建这个变量。 另外,也可以创建一个像“稀有”这样的特征,它是根据我们拥有的数据标记一些稀有物品然后计算购物车中稀有物品的数量而创建的,这些特征可能是有效的或无效的。根据我的观察,它们通常能够提供很多价值。9.做的不那么正常的事情:这些特征非常不直观,不应在机器学习模型需要解释的地方创建。A)交互特征:如果有特征A和B,并创建特征A * B、A + B、A / B、AB,这会使得特征空间爆炸。如果你有10个特征,并且要创建两个可变交互特征,这将为模型添加 180个特征。并且,绝大多数时候,都会有超过10个的特征。B)使用散列的存储桶特征:假设你有数千的特征,并按顺序排好,但考虑到算法的训练时间,并不想使用所有的数千千个特征。一般是使用一些哈希算法来实现这一点,最后完成文本分类任务。例如: 假设有6个特征A、B、C、D、E、F:并且数据行是:A:1、B:1、C:1、D:0、E:1、F:0 可能决定使用散列函数,以便这6个特征对应于3个桶并创建使用此特征的数据哈希矢量。处理完后,数据可能如下所示:Bucket1:2、Bucket2:2、Bucket3:0A:1、B:1、C:1、D:0、E:1、F:0 之所以发生这种情况是因为A和B掉落在桶1中、C和E落在桶2中、D和F落在桶3中。这里只是总结了上述的观察结果,你也可以用你想要的任何数学函数替换掉上述的加法操作。之后,将使用Bucket1、Bucket2、Bucket3作为机器学习的变量。A:1、B:1、C:1、D:0、E:1、F:0 以上是本文的全部内容,后续将持续更新,如果读者有比较好的处理方法,请在下面留言给出。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。 ...

January 4, 2019 · 2 min · jiezi

玩转JavaScript,这些技巧值得你拥有!

oncontextmenu=“window.event.returnValue=false” 将彻底屏蔽鼠标右键<table border oncontextmenu=return(false)> <td>no </table> 可用于Table<body onselectstart=“return false”> 取消选取、防止复制onpaste=“return false” 不准粘贴oncopy=“return false;” oncut=“return false;” 防止复制<link rel=“Shortcut Icon” href=“favicon.ico”> IE地址栏前换成自己的图标6. <link rel=“Bookmark” href=“favicon.ico”> 可以在收藏夹中显示出你的图标<input style=“ime-mode:disabled”> 关闭输入法永远都会带着框架<script language=“JavaScript”> <!– if (window == top)top.location.href = “frames.htm”; //frames.htm为框架网页 // –> </script>防止被人frame<SCRIPT LANGUAGE=JAVASCRIPT> <!– if (top.location != self.location)top.location=self.location; // –> </SCRIPT>网页将不能被另存为<noscript> <*** src="/.html>"; </> </noscript><input type=button value="/查看网页源代码onclick=“window.location = “view-source:"+ “http://www.pconline.com.cn”">12.删除时确认<a href=““javascript :if(confirm(“确实要删除吗?”))location=“boos.asp?&areyou=删除&page=1"">删除 </a>取得控件的绝对位置//Javascript <script language=“Javascript”> function getIE(e){ var t=e.offsetTop; var l=e.offsetLeft; while(e=e.offsetParent){ t+=e.offsetTop; l+=e.offsetLeft; } alert(“top="+t+"/nleft="+l); } </script> //VBScript <script language=“VBScript”> <!– function getIE() dim t,l,a,b set a=document.all.img1 t=document.all.img1.offsetTop l=document.all.img1.offsetLeft while a.tagName <>“BODY” set a = a.offsetParent t=t+a.offsetTop l=l+a.offsetLeft wend msgbox “top="&t&chr(13)&“left="&l,64,“得到控件的位置” end function –> </script>光标是停在文本框文字的最后<script language=“javascript”> function cc() { var e = event.srcElement; var r =e.createTextRange(); r.moveStart(“character”,e.value.length); r.collapse(true); r.select(); } </script> <input type=text name=text1 value=“123” onfocus=“cc()">判断上一页的来源javascript : document.referrer最小化、最大化、关闭窗口<object id=hh1 classid=“clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11”> <param name=“Command” value=“Minimize”> </object> <object id=hh2 classid=“clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11”> <param name=“Command” value=“Maximize”> </object> <OBJECT id=hh3 classid=“clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11”> <PARAM NAME=“Command” value="/Close”> </OBJECT> <input type=button value="/最小化 onclick=hh1.Click()> <input type=button value="/blog/最大化 onclick=hh2.Click()> <input type=button value=关闭 onclick=hh3.Click()> 本例适用于IE17.屏蔽功能键Shift,Alt,Ctrl<script> function look(){ if(event.shiftKey) alert(“禁止按Shift键!”); //可以换成ALTCTRL } document.onkeydown=look; </script>网页不会被缓存<META HTTP-EQUIV=“pragma” CONTENT=“no-cache”> <META HTTP-EQUIV=“Cache-Control” CONTENT=“no-cache, must-revalidate”> <META HTTP-EQUIV=“expires” CONTENT=“Wed, 26 Feb 1997 08:21:57 GMT”> 或者 <META HTTP-EQUIV=“expires” CONTENT=“0”>19.怎样让表单没有凹凸感?<input type=text style=“““border:1 solid #000000”> 或 <input type=text style=“border-left:none; border-right:none; border-top:none; border-bottom: 1 solid #000000”> </textarea>20. <div> <span>& <layer>的区别? <div>(division)用来定义大段的页面元素,会产生转行 <span>用来定义同一行内的元素,跟 <div>的唯一区别是不产生转行 <layer>是ns的标记,ie不支持,相当于 <div>21.让弹出窗口总是在最上面:<body onblur=“this.focus();">22.不要滚动条?让竖条没有: <body style=“overflow:scroll;overflow-y:hidden”> </body> 让横条没有: <body style=“overflow:scroll;overflow-x:hidden”> </body> 两个都去掉?更简单了 <body scroll=“no”> </body>23.怎样去掉图片链接点击后,图片周围的虚线?<a href=”#” onFocus=“this.blur()"> <img src="/logo.jpg” border=0> </a>24.电子邮件处理提交表单<form name=“form1” method=“post” action=mailto:@*.com enctype=“text/plain”> <input type=submit> </form>25.在打开的子窗口刷新父窗口的代码里如何写?window.opener.location.reload()26.如何设定打开页面的大小<body onload=“top.resizeTo(300,200);"> 打开页面的位置 <body onload=“top.moveBy(300,200);">27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动<STYLE> body {background-image:url(/logo.gif); background-repeat:no-repeat; background-position:center;background-attachment: fixed} </STYLE>检查一段字符串是否全由数字组成<script language=“Javascript”> <!– function checkNum(str){return str.match(//D/)==null} alert(checkNum(“1232142141”)) alert(checkNum(“123214214a1”)) // –> </script>获得一个窗口的大小document.body.clientWidth; document.body.clientHeight怎么判断是否是字符if (/[^/x00-/xff]/g.test(s)) alert(“含有汉字”); else alert(“全是字符”);31.TEXTAREA自适应文字行数的多少<textarea rows=1 name=s1 cols=27 onpropertychange =“this.style.posHeight=this.scrollHeight”> </textarea>日期减去天数等于第二个日期<script language=Javascript> function cc(dd,dadd) { //可以加上错误处理 var a = new Date(dd) a = a.valueOf() a = a - dadd * 24 * 60 * 60 * 1000 a = new Date(a) alert(a.getFullYear() + “年” + (a.getMonth() + 1) + “月” + a.getDate() + “日”) } cc(“12/23/2002”,2) </script>选择了哪一个Radio<HTML> <script language=“vbscript”> function checkme() for each ob in radio1 if ob.checked then window.alert ob.value next end function </script> <BODY> <INPUT name=“radio1” type=“radio” value="/style” checked>Style <INPUT name=“radio1” type=“radio” value="/blog/barcode”>Barcode <INPUT type=“button” value=“check” </BODY> </HTML>34.脚本永不出错<SCRIPT LANGUAGE=“JavaScript”> <!– Hide function killErrors() { return true; } window.onerror = killErrors; // –> </SCRIPT>35.ENTER键可以让光标移到下一个输入框<input onkeydown=“if(event.keyCode==13)event.keyCode=9”>检测某个网站的链接速度:把如下代码加入 <body>区域中: <script language=Javascript> tim=1 setInterval(“tim++",100) b=1 var autourl=new Array() autourl[1]=1000){this.resized=true;this.style.width=1000;}” align=absMiddle border=0>www.njcatv.net” autourl[2]=“javacool.3322.net” autourl[3]=1000){this.resized=true;this.style.width=1000;}” align=absMiddle border=0>www.sina.com.cn” autourl[4]=“www.nuaa.edu.cn” autourl[5]=1000){this.resized=true;this.style.width=1000;}” align=absMiddle border=0>www.cctv.com” function butt(){ *(” <form name=autof>”) for(var i=1;i <autourl.length;i++) (” <input type=text name=txt”+i+" size=10 value="/测试中……> =》 <input type=text name=url"+i+" size=40> =》 <input type=button value="/blog/GO onclick=window.open(this.form.url"+i+".value)> <br>") (" <input type=submit value=刷新> </form>") } butt() function auto(url){ document.forms[0][“url”+b].value=url if(tim>200) {document.forms[0][“txt”+b].value="/链接超时"} else {document.forms[0][“txt”+b].value="/blog/时间"+tim/10+“秒”} b++ } function run(){for(var i=1;i <autourl.length;i++)(" <img src=http://"+autourl+"/"+Math.random()+" width=1 height=1 onerror=auto(“http://"+autourl+”")>")} run() </script>各种样式的光标auto :标准光标 default :标准箭头 hand :手形光标 wait :等待光标 text :I形光标 vertical-text :水平I形光标 no-drop :不可拖动光标 not-allowed :无效光标 help :?帮助光标 all-scroll :三角方向标 move :移动标 crosshair :十字标 e-resize n-resize nw-resize w-resize s-resize se-resize sw-resize38.页面进入和退出的特效进入页面 <meta http-equiv=“Page-Enter” content=“revealTrans(duration=x, transition=y)"> 推出页面 <meta http-equiv=“Page-Exit” content=“revealTrans(duration=x, transition=y)"> 这个是页面被载入和调出时的一些特效。duration表示特效的持续时间,以秒为单位。transition表示使用哪种特效,取值为1-23: 0 矩形缩小 1 矩形扩大 2 圆形缩小 3 圆形扩大 4 下到上刷新 5 上到下刷新 6 左到右刷新 7 右到左刷新 8 竖百叶窗 9 横百叶窗 10 错位横百叶窗 11 错位竖百叶窗 12 点扩散 13 左右到中间刷新 14 中间到左右刷新 15 中间到上下 16 上下到中间 17 右下到左上 18 右上到左下 19 左上到右下 20 左下到右上 21 横条 22 竖条 以上22种随机选择一种39.在规定时间内跳转<META http-equiv=V=“REFRESH” content=“5;URL=http://www.51js.com”>40.网页是否被检索 <meta name=“ROBOTS” content=“属性值”> 其中属性值有以下一些: 属性值为"all”: 文件将被检索,且页上链接可被查询; 属性值为"none”: 文件不被检索,而且不查询页上的链接; 属性值为"index": 文件将被检索; 属性值为"follow": 查询页上的链接; 属性值为"noindex": 文件不检索,但可被查询链接; 属性值为"nofollow": 文件不被检索,但可查询页上的链接。41、email地址的分割 把如下代码加入 <body>区域中<a href=“mailto:webmaster@sina.com”>webmaster@sina.com </a>42、流动边框效果的表格 把如下代码加入 <body>区域中<SCRIPT> l=Array(6,7,8,9,‘a‘,‘b‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘) Nx=5;Ny=35 t=" <table border=0 cellspacing=0 cellpadding=0 height="+((Nx+2)16)+"> <tr>" for(x=Nx;x <Nx+Ny;x++) t+=" <td width=16 id=a_mo"+x+"> </td>" t+=" </tr> <tr> <td width=10 id=a_mo"+(Nx-1)+"> </td> <td colspan="+(Ny-2)+" rowspan="+(Nx)+"> </td> <td width=16 id=a_mo"+(Nx+Ny)+"> </td> </tr>" for(x=2;x <=Nx;x++) t+=" <tr> <td width=16 id=a_mo"+(Nx-x)+"> </td> <td width=16 id=a_mo"+(Ny+Nx+x-1)+"> </td> </tr>" t+=" <tr>" for(x=Ny;x>0;x–) t+=" <td width=16 id=a_mo"+(x+Nx2+Ny-1)+"> </td>" (t+" </tr> </table>") var N=Nx2+Ny2 function f1(y){ for(i=0;i <N;i++){ c=(i+y)%20;if(c>10)c=20-c document.all[“a_mo”+(i)].bgColor=""""#0000"+l[c]+l[c]+"‘"} y++ setTimeout(‘f1(‘+y+‘)‘,‘1‘)} f1(1) </SCRIPT>43、JavaScript主页弹出窗口技巧 窗口中间弹出<script> window.open(“http://www.cctv.com”,"",“width=400,height=240,top="+(screen.availHeight-240)/2+",left="+(screen.availWidth-400)/2); </script> ============ <html> <head> <script language=“LiveScript”> function WinOpen() { msg=open(”",“DisplayWindow”,“toolbar=no,directories=no,menubar=no”); msg.(" <HEAD> <TITLE>哈 罗! </TITLE> </HEAD>"); msg.(" <CENTER> <H1>酷 毙 了! </H1> <h2>这 是 <B>JavaScript </B>所 开 的 视 窗! </h2> </CENTER>"); } </script> </head> <body> <form> <input type=“button” name=“Button1” value=“Push me” </form> </body> </html> ============== 一、在下面的代码中,你只要单击打开一个窗口,即可链接到赛迪网。而当你想关闭时,只要单击一下即可关闭刚才打开的窗口。 代码如下:<SCRIPT language=“JavaScript”> <!– function openclk() { another=open(‘1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0>http://www.ccidnet.com‘,‘NewWindow‘); } function closeclk() { another.close(); } //–> </SCRIPT> <FORM> <INPUT TYPE=“BUTTON” NAME=“open” value="/打开一个窗口" onClick=“openclk()"> <BR> <INPUT TYPE=“BUTTON” NAME=“close” value="/blog/关闭这个窗口” onClick=“closeclk()"> </FORM> 二、上面的代码也太静了,为何不来点动感呢?如果能给页面来个降落效果那该多好啊! 代码如下:<script> function drop(n) { if(self.moveBy){ self.moveBy (0,-900); for(i = n; i > 0; i–){ self.moveBy(0,3); } for(j = 8; j > 0; j–){ self.moveBy(0,j); self.moveBy(j,0); self.moveBy(0,-j); self.moveBy(-j,0); } } } </script> <body onLoad=“drop(300)"> 三、讨厌很多网站总是按照默认窗口打开,如果你能随心所欲控制打开的窗口那该多好。 代码如下:<SCRIPT LANGUAGE=“JavaScript”> <!– Begin function popupPage(l, t, w, h) { var windowprops = “location=no,scrollbars=no,menubars=no,toolbars=no,resizable=yes” + “,left=” + l + “,top=” + t + “,width=” + w + “,height=” + h; var URL = “http://www.80cn.com”; popup = window.open(URL,“MenuPopup”,windowprops); } // End –> </script> <table> <tr> <td> <form name=popupform> <pre> 打开页面的参数 <br> 离开左边的距离: <input type=text name=left size=2 maxlength=4> pixels 离开右边的距离: <input type=text name=top size=2 maxlength=4> pixels 窗口的宽度: <input type=text name=width size=2 maxlength=4> pixels 窗口的高度: <input type=text name=height size=2 maxlength=4> pixels </pre> <center> <input type=button value=“打开这个窗口!” onClick=“popupPage(this.form.left.value, this.form.top.value, this.form.width.value, this.form.height.value)"> </center> </form> </td> </tr> </table>你只要在相对应的对话框中输入一个数值即可,将要打开的页面的窗口控制得很好。44、页面的打开移动 把如下代码加入 <body>区域中<SCRIPT LANGUAGE=“JavaScript”> <!– Begin for (t = 2; t > 0; t–) { for (x = 20; x > 0; x–) { for (y = 10; y > 0; y–) { parent.moveBy(0,-x); } } for (x = 20; x > 0; x–) { for (y = 10; y > 0; y–) { parent.moveBy(0,x); } } for (x = 20; x > 0; x–) { for (y = 10; y > 0; y–) { parent.moveBy(x,0); } } for (x = 20; x > 0; x–) { for (y = 10; y > 0; y–) { parent.moveBy(-x,0); } } } //–> // End –> </script>45、显示个人客户端机器的日期和时间<script language=“LiveScript”> <!– Hiding today = new Date() ***(“现 在 时 间 是: “,today.getHours(),”:",today.getMinutes()) (” <br>今 天 日 期 为: “, today.getMonth()+1,”/",today.getDate(),”/",today.getYear()); // end hiding contents –> </script>46、自动的为你每次产生最後修改的日期了:<html> <body> This is a simple HTML- page. <br> Last changes: <script language=“LiveScript”> <!– hide script from old browsers (document.lastModified) // end hiding contents –> </script> </body> </html>47、不能为空和邮件地址的约束:<html> <head> <script language=“JavaScript”> <!– Hide function test1(form) { if (form.text1.value == “”) alert(“您 没 写 上 任 何 东 西, 请 再 输 入 一 次 !”) else { alert(“嗨 “+form.text1.value+”! 您 已 输 入 完 成 !”); } } function test2(form) { if (form.text2.value == "” || form.text2.value.indexOf(‘@‘, 0) == -1) alert(“这 不 是 正 确 的 e-mail address! 请 再 输 入 一 次 !”); else alert(“您 已 输 入 完 成 !”); } // –> </script> </head> <body> <form name=“first”> Enter your name: <br> <input type=“text” name=“text1”> <input type=“button” name=“button1” value=“输 入 测 试” onClick=“test1(this.form)"> <P> Enter your e-mail address: <br> <input type=“text” name=“text2”> <input type=“button” name=“button2” value=“输 入 测 试” onClick=“test2(this.form)"> </body>48、跑马灯<html> <head> <script language=“JavaScript”> <!– Hide var scrtxt=“怎麽样 ! 很酷吧 ! 您也可以试试."+“Here goes your message the visitors to your page will “+“look at for hours in pure fascination…”; var lentxt=scrtxt.length; var width=100; var pos=1-width; function scroll() { pos++; var scroller=””; if (pos==lentxt) { pos=1-width; } if (pos <0) { for (var i=1; i <=Math.abs(pos); i++) { scroller=scroller+” “;} scroller=scroller+scrtxt.substring(0,width-i+1); } else { scroller=scroller+scrtxt.substring(pos,width+pos); } window.status = scroller; setTimeout(“scroll()",150); } //–> </script> </head> <body onLoad=“scroll();return true;"> 这里可显示您的网页 ! </body> </html>49、在网页中用按钮来控制前页,后页和主页的显示。<html> <body> <FORM NAME=“buttonbar”> <INPUT TYPE=“button” VALUE=“Back” onClick=“history.back()"> <INPUT TYPE=“button” VALUE=“JS- Home” onClick=“location=‘script.html‘"> <INPUT TYPE=“button” VALUE=“Next” onCLick=“history.forward()"> </FORM> </body> </html>50、查看某网址的源代码 把如下代码加入 <body>区域中<SCRIPT> function add() { var ress=document.forms[0].luxiaoqing.value window.location=“view-source:"+ress; } </SCRIPT> 输入要查看源代码的URL地址:<FORM> <input type=“text” name=“luxiaoqing” size=40 value=“http://"> </FORM> <FORM> <br> <INPUT type=“button” value=“查看源代码” onClick=add()> </FORM>51、title显示日期 把如下代码加入 <body>区域中:<script language=“JavaScript1.2”> <!–hide var isnMonth = new Array(“1月”,“2月”,“3月”,“4月”,“5月”,“6月”,“7月”,“8月”,“9月”,“10月”,“11月”,“12月”); var isnDay = new Array(“星期日”,“星期一”,“星期二”,“星期三”,“星期四”,“星期五”,“星期六”,“星期日”); today = new Date () ; Year=today.getYear(); Date=today.getDate(); if (document.all) document.title=“今天是: “+Year+“年”+isnMonth[today.getMonth()]+Date+“日”+isnDay[today.getDay()] //–hide–> </script>52、显示所有链接 把如下代码加入 <body>区域中<script language=“JavaScript1.2”> <!– function extractlinks(){ var links=document.all.tags(“A”) var total=links.length var win2=window.open(””,””,“menubar,scrollbars,toolbar”) win2.(” <font size=‘2‘>一共有”+total+“个连接 </font> <br>”) for (i=0;i <total;i++){ win2.(” <font size=‘2‘>"+links.outerHTML+” </font> <br>”) } } //–> </script> <input type=“button” onClick=“extractlinks()” value=“显示所有的连接”>53、回车键换行 把如下代码加入 <body>区域中<script type=“text/javascript”> function handleEnter (field, event) { var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; if (keyCode == 13) { var i; for (i = 0; i < field.form.elements.length; i++) if (field == field.form.elements) break; i = (i + 1) % field.form.elements.length; field.form.elements.focus(); return false; } else return true; } </script> <form> <input type=“text” onkeypress=“return handleEnter(this, event)"> <br> <input type=“text” onkeypress=“return handleEnter(this, event)"> <br> <textarea>回车换行54、确认后提交 把如下代码加入 <body>区域中<SCRIPT LANGUAGE=“JavaScript”> <!– function msg(){ if (confirm(“你确认要提交嘛!”)) document.lnman.submit() } //–> </SCRIPT> <form name=“lnman” method=“post” action=”"> <p> <input type=“text” name=“textfield” value=“确认后提交”> </p> <p> <input type=“button” name=“Submit” value=“提交” </p> </form>55、改变表格的内容 把如下代码加入 <body>区域中<script ***script> var arr=new Array() arr[0]=“一一一一一”; arr[1]=“二二二二二”; arr[2]=“三三三三三”; </script> <select onchange=“zz.cells[this.selectedIndex].innerHTML=arr[this.selectedIndex]"> <option value=a>改变第一格 </option> <option value=a>改变第二格 </option> <option value=a>改变第三格 </option> </select> <table id=zz border=1> <tr height=20> <td width=150>第一格 </td> <td width=150>第二格 </td> <td width=150>第三格 </td> </tr> </table>web前端学习:加入 ...

November 17, 2018 · 7 min · jiezi