Php 使用两个相同的递归来做两件不同的事情
我试图用Php 使用两个相同的递归来做两件不同的事情,php,jquery,html,recursion,Php,Jquery,Html,Recursion,我试图用JQuery展开和折叠来显示树数据 For example my database Parent A has AA, AB, AC children Parent AA has AAA, AAB, AAC Parent AC has ACA, ACB, ACD etc. 所以我使用递归来显示数据库中的所有数据 但是我还需要声明JQuery,所以我使用相同的递归代码来生成脚本 我想问的是,有没有办法一次使用递归来生成这两个东西?数据显示在标记中,JQuery声明在标记中 因为我觉得做两
JQuery
展开和折叠来显示树
数据
For example my database
Parent A has AA, AB, AC children
Parent AA has AAA, AAB, AAC
Parent AC has ACA, ACB, ACD
etc.
所以我使用递归来显示数据库中的所有数据
但是我还需要声明JQuery,所以我使用相同的递归
代码来生成脚本
我想问的是,有没有办法一次使用递归来生成这两个东西?数据显示在
标记中,JQuery声明在
标记中
因为我觉得做两次同样的事情会浪费记忆
这是我的
代码
<?
$temp = "";
$parent = "";
$level = 0;
loadFolders($parent, $level, $temp);
function loadFolders($parent, $level, $temp){
$getLevelSql = mysql_query("select * from folders where parent='$parent' and level='$level'");
$level++;
while ($getLevelSqlRow = mysql_fetch_array($getLevelSql)){
$parentID = $getLevelSqlRow['id'];
$child = $getLevelSqlRow['child'];
$checkChild = mysql_query("select * from folders where parent='$parentID' and level='$level' ");
if (mysql_num_rows($checkChild)){
?>
<div class="level1 redFont" id="levelID<?echo $getLevelSqlRow['id'];?>">
<?echo "$child";?>
</div>
<div class="level2" id="childID<?echo $getLevelSqlRow['id'];?>">
<?
loadFolders($parentID, $level, $temp);
?>
</div>
<?
} else {
?>
<div><?echo "$child";?></div>
<?
}
}
}
?>
<script>
$(document).ready(function(){
<?
include "config.php";
$temp = "";
$parent = "";
$level = 0;
loadFolder($parent, $level, $temp);
function loadFolder($parent, $level, $temp){
$getLevelSql = mysql_query("select * from folders where parent='$parent' and level='$level'");
$level++;
while ($getLevelSqlRow = mysql_fetch_array($getLevelSql)){
$parentID = $getLevelSqlRow['id'];
$child = $getLevelSqlRow['child'];
$checkChild = mysql_query("select * from folders where parent='$parentID' and level='$level' ");
if (mysql_num_rows($checkChild)){
?>
$("#levelID<?echo $getLevelSqlRow['id'];?>").click(function(){
$("#childID<?echo $getLevelSqlRow['id'];?>").slideToggle("slow");
});
<?
loadFolder($parentID, $level, $temp);
?>
<?
}
}
}
?>
});
</script>
我没有测试过这个,因为我没有数据,但基本上您只需要在jquery代码中使用选择器,从任何单击点查找子部分
我将嵌套child元素以使其更容易。大概是这样的:
<?
$temp = "";
$parent = "";
$level = 0;
loadFolders($parent, $level, $temp);
function loadFolders($parent, $level, $temp){
$getLevelSql = mysql_query("select * from folders where parent='$parent' and level='$level'");
$level++;
while ($getLevelSqlRow = mysql_fetch_array($getLevelSql)){
$parentID = $getLevelSqlRow['id'];
$child = $getLevelSqlRow['child'];
$checkChild = mysql_query("select * from folders where parent='$parentID' and level='$level' ");
if (mysql_num_rows($checkChild)){
// ** notice I've added item class and nested the children inside
?>
<div class="level1 redFont item" id="levelID<?echo $getLevelSqlRow['id'];?>">
<?echo "$child";?>
<div class="children" id="childID<?echo $getLevelSqlRow['id'];?>">
</div>
<?
loadFolders($parentID, $level, $temp);
?>
</div>
<?
} else {
?>
<div><?echo "$child";?></div>
<?
}
}
}
?>
$(document).ready(function(){
$('div.item').click(function(){
$(this).find('>div.children').slideToggle("slow");
});
});
不需要循环两次并生成100个处理程序。这是一个非常复杂的方法。@Ben Yeah,或者这是唯一的方法吗?我只想节省内存消耗。谢谢你的回答。但它最终将扩展所有带有子类的标记。我有很多数据,所有数据都有不同的含义levels@Sieryuu
表示直接子项它不起作用,我已更改了类并更改了JQuery
尝试控制台。在处理程序中记录内容并尝试找出正确的选择器。子项不是父项
标记的子项
标记。它就在parent
标记的下方。例如,parentchild。什么“>”是亲子仪式?