无限分类算法 js 的实现

js|算法

通过asp 动态生成 js 的数组,然后js在客户端去排列,最大的减少了服务器端的压力。(服务器端只是查询了一次,没有其他操作)

数据库设计:

id:索引,自动编号
mc:varchar 100字节,记录分类名称
fl:数字,记录属于哪个分类,0为根分类
ceng:数字,记录处于多少层 根分类为0层,以后递增1

生成的html代码如下:

运行代码框

<html><head><title>fenlei</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body bgcolor="#FFFFFF" text="#000000"><SCRIPT LANGUAGE="JavaScript"><!--var dataArray = {};var tempArray = {};var xx="";tempArray[0]="0@_!_#_$_|_@1@_!_#_$_|_@test@_!_#_$_|_@0";tempArray[1]="1@_!_#_$_|_@2@_!_#_$_|_@test1@_!_#_$_|_@1";tempArray[2]="2@_!_#_$_|_@3@_!_#_$_|_@test1-test2@_!_#_$_|_@2";tempArray[3]="0@_!_#_$_|_@4@_!_#_$_|_@test@_!_#_$_|_@0";tempArray[4]="4@_!_#_$_|_@5@_!_#_$_|_@test5@_!_#_$_|_@1";tempArray[5]="2@_!_#_$_|_@6@_!_#_$_|_@aaa@_!_#_$_|_@2";tempArray[6]="2@_!_#_$_|_@7@_!_#_$_|_@sss@_!_#_$_|_@2";var y=0;function loadNextType(upid){ for(var key in tempArray){var temps=tempArray[key].split("@_!_#_$_|_@");var z=temps[1];if(temps[0]==upid){y+=1;xx="";for(k=0;k<parseInt(temps[3]);k++){if(k!=parseInt(temps[3])-1){xx+=" ";}else{xx+=" ◇";}}dataArray[y]=temps[0]+"@_!_#_$_|_@"+temps[1]+"@_!_#_$_|_@"+xx+temps[2];loadNextType(z);}}}for(var key in tempArray){var tmp=tempArray[key].split("@_!_#_$_|_@");if(tmp[0]==0){dataArray[y]=tmp[0]+"@_!_#_$_|_@"+tmp[1]+"@_!_#_$_|_@"+"◆"+tmp[2];loadNextType(tmp[1]);y+=1;}}//--></SCRIPT><span style="border:1px solid #000000; position:absolute; overflow:hidden;" > <select name="fenlei" style="margin:-2px;"> <SCRIPT LANGUAGE="JavaScript"><!--for(var key in dataArray){var tp=dataArray[key].split("@_!_#_$_|_@");document.write('<option value='+tp[1]+'>'+tp[2]+'</option>');}//--></SCRIPT></select></span> </body></html>

  [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

服务器端asp代码如下:

运行代码框

<!--#include file="../conn.asp"--><!--#include file="ck.asp"--><html><head><title>fenlei</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body bgcolor="#FFFFFF" text="#000000"><SCRIPT LANGUAGE="JavaScript"><!--var dataArray = {};var tempArray = {};var xx="";<%dim sqlSet rs=server.createobject("adodb.recordset")sql="select * from fenlei"rs.open sql,conn,1,1dim xx=0do while not rs.eofresponse.write "tempArray[" & x & "]=""" &rs("fl") & "@_!_#_$_|_@" &rs("id") & "@_!_#_$_|_@" & rs("mc") & "@_!_#_$_|_@" & rs("ceng") & """;"x=x+1rs.movenextloop%>var y=0;function loadNextType(upid){ for(var key in tempArray){var temps=tempArray[key].split("@_!_#_$_|_@");var z=temps[1];if(temps[0]==upid){y+=1;xx="";for(k=0;k<parseInt(temps[3]);k++){if(k!=parseInt(temps[3])-1){xx+=" ";}else{xx+=" ◇";}}dataArray[y]=temps[0]+"@_!_#_$_|_@"+temps[1]+"@_!_#_$_|_@"+xx+temps[2];loadNextType(z);}}}for(var key in tempArray){var tmp=tempArray[key].split("@_!_#_$_|_@");if(tmp[0]==0){dataArray[y]=tmp[0]+"@_!_#_$_|_@"+tmp[1]+"@_!_#_$_|_@"+"◆"+tmp[2];loadNextType(tmp[1]);y+=1;}}//--></SCRIPT><span style="border:1px solid #000000; position:absolute; overflow:hidden;" > <select name="fenlei" style="margin:-2px;"> <SCRIPT LANGUAGE="JavaScript"><!--for(var key in dataArray){var tp=dataArray[key].split("@_!_#_$_|_@");document.write('<option value='+tp[1]+'>'+tp[2]+'</option>');}//--></SCRIPT></select></span> </body></html>
[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

讲解:

asp 查询数据库,生成js数据 object(不是数组,类似)
数据库不同的行,对应不同的 tempArray[0] tempArray[1]......
不同字段在每条数据中通过"@_!_#_$_|_@"分割,以避免会与数据中的文本有重复。

用js通过递归算法重新排列tempArray 得到dataArray 并循环打印成为select中的option

时间: 2024-11-01 04:15:54

无限分类算法 js 的实现的相关文章

几篇关于无限分类算法的文章第1/5页_php技巧

http://dev.mysql.com/tech-resources/articles/hierarchical-data.html By Mike Hillyer Introduction Most users at one time or another have dealt with hierarchical data in a SQL database and no doubt learned that the management of hierarchical data is no

PHP递归遍历多维数组实现无限分类的方法_php技巧

本文实例讲述了PHP递归遍历多维数组实现无限分类的方法.分享给大家供大家参考,具体如下: <?php //$data[]=array('id'=>1,'parentid'=>0,'name'=>'中国','img'=>'52091199'); $data[]=array('id'=>1,'parentid'=>0,'name'=>'中国'); $data[]=array('id'=>2,'parentid'=>0,'name'=>'美国')

php+mysql实现无限分类实例详解

 这篇文章主要介绍了php+mysql实现无限分类的方法,实例分析了mysql数据库设计.数据库操作及无限极分类的具体实现步骤,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了php+mysql实现无限分类的方法.分享给大家供大家参考.具体分析如下: 1.数据库通过设置父类ID来进行唯一索引,然后使用函数的递归调用实现无限分类: 2.数据库设计通过特定格式进行排列,然后使用mysql查询关键函数:concat,程序实现比较简单,首先我们假设有这样的一个三级分类,新闻→PHP新闻→P

一棵php的类树(支持无限分类)_php基础

最近问无限分类的类树问题比较多,所以一高兴自己写了一个,我刚写完的,大家用用看,看看怎么实现起来更快,更简单,把你的树也贴出来(要只查询一次数据库的)<br>  这是一棵分类列表的类树,  支持无限分类<br>  一个分类下面可以同时有"包含子类的分类"和"最终分类";<br>  唯一的优点是*****只需要进行一次的数据库*****查询.<br>  样子不是很好看,不过可以自定义修改,可以自己定义css加里面<

thinkphp实现无限分类(使用递归)_javascript技巧

本文实例为大家分享了thinkphp实现无限分类的详细代码,希望对大家学习无限分类有所启发. 数据库:test 数据表:(tp_category): Common/conf/config.php 'DB_CONFIG2' => array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => '', 'db_host' => 'localhost', 'db_port' => '3306', 'db_name'

php 无限分类 树形数据格式化代码_php实例

我们知道很多开源软件的无限分类都是采用递归的算法,但是我们知道递归即浪费时间,又浪费空间(内存), 上次我也分享了个我自己原创的无限分类生成树的方法,一热心php高手网友给我提出了宝贵的建议,我测试了一下,这段代码的时间非常之短参考: http://www.oschina.net/code/snippet_98719_11296,我再次整理了一下,发现数据库查询出数据之后,我们就已经定好了键值,因而实践中,我们一般会在model中查询出格式化成主键值对应数据的形式,因而我们可以直接用这样的数据,

PHP 无限分类三种方式 非函数的递归调用!_php技巧

php无限分类大致有三种方式, 1.数据库通过设置父类ID来进行唯一索引,然后使用函数的递归调用实现无限分类: 2.数据库设计通过特定格式进行排列,然后使用mysql查询关键函数:concat.程序实现比较简单: 3.第三种不是太了解, 好像要使用到算法和数据结构进行排列. 今天我主要分享下第二种方式,一开始也是找了很多资料,确实比较难理解.不过最终还是给搞明白了,因此记下随笔,希望通过这篇文章能够帮助到大家. 一.数据库设计: 复制代码 代码如下: -- -- Table structure

Logistic Regression 分类算法

Logistic Regression 分类算法 Logistic Regression包含三个部分:回归,线性回归,Logistic方程 1) 回归 Logistic regression是线性回归的一种,线性回归是一种回归.那么回归是虾米呢? 回归其实就是对已知公式的未知参数进行估计.比如已知公式是y=a∗x+b,未知参数是a和b.我们现在有很多真实的(x,y)数据(训练样本),回归就是利用这些数据对a和b的取值去自动估计.估计的方法大家可以简单的理解为,在给定训练样本点和已知的公式后,对于

php 多种无限分类实例

创建数据库教程以及表: CREATE DATABASE `sortclass`DEFAULT CHARSET utf8; CREATE TABLE IF NOT EXISTS `class` ( `cid` mediumint(8) unsigned NOT NULL auto_increment, `pid` mediumint(8) unsigned NOT NULL, `cname` varchar(50) NOT NULL, PRIMARY KEY (`cid`), KEY `pid`