javascript、CSS 和 PHP 文件夹树
javascript, CSS and PHP folder tree
我正在通过 javascript 和 PHP 制作文件夹树。
那是我的 PHP 代码:
function getSubDirectories($dirName) {
$ffs = scandir($dirName);
unset($ffs[array_search('.', $ffs, true)]);
unset($ffs[array_search('..', $ffs, true)]);
// prevent empty ordered elements
if (count($ffs) < 1)
return;
echo '<ul class = "mainFolder">';
foreach($ffs as $ff) {
if(is_dir($dirName.'/'.$ff)) {
echo "<li class = 'subFolder' ><span class = 'subFolderSpan' onclick = hideFolder(this.id) id = ".$ff.">".$ff;
getSubDirectories($dirName.'/'.$ff);
}
echo '</span></li>';
}
echo '</ul>';
}
//getSubDirectories("../deneme");
?>
这是我的 javascript 代码:
function hideFolder(ID) {
var elementID = ID;
var element = document.getElementById(elementID);
var firstChildOfelement = element.firstElementChild;
console.log(ID);
//console.log(element.childNodes);
if (firstChildOfelement.style.display == "none") {
firstChildOfelement.style.display = "";
}
else {
firstChildOfelement.style.display = "none";
}
}
这是我的 CSS 文件
.rootFolder {
margin: 0;
padding: 0;
cursor:pointer;
}
.subFolder {
/*margin-left: 2.5em;*/
/* list-style: square inside url("Folder-icon.png");*/
padding-left:2.5em;
/*list-style-type: disc;*/
}
.mainFolder {
padding:0 ;
}
.subFolderSpan:hover {
background-color: aquamarine;
}
我的问题是:当我在列表项上时,所有 parents 都改变了它们的背景颜色。不仅仅是我所在的项目。这是 CSS 问题。我试着做了一个没有PHP的无序列表结构,然后没有出现问题。
a screenshot for CSS problem
当我点击一个 span 时,onclick 影响不起作用。我收到这个错误
folderTree.js:7 Uncaught TypeError: Cannot read property 'firstElementChild' of null
at hideFolder (folderTree.js:7)
at HTMLSpanElement.onclick (getFolders.php:15)
如果我在控制台上编写相同的代码,它就可以工作。
感谢您的帮助...
我解决了这个问题。在我编辑此部分后:
echo '<ul class = "mainFolder">';
foreach($ffs as $ff){
if(is_dir($dirName.'/'.$ff)){
echo "<li class = 'subFolder' ><span class = 'subFolderSpan' onclick = hideFolder(this.id) id = ".$ff.">".$ff;
getSubDirectories($dirName.'/'.$ff);
}
echo '</span></li>';
}
echo '</ul>';
像那样:
echo '<ul class = "mainFolder">';
foreach($ffs as $ff){
if(is_dir($dirName.'/'.$ff)){
echo "<li class = 'subFolder' ><span class = 'subFolderSpan' onclick = hideFolder(this.id) id = ".$ff.">".$ff."</span>";
getSubDirectories($dirName.'/'.$ff);
}
echo '</li>';
}
echo '</ul>';
我正在通过 javascript 和 PHP 制作文件夹树。
那是我的 PHP 代码:
function getSubDirectories($dirName) {
$ffs = scandir($dirName);
unset($ffs[array_search('.', $ffs, true)]);
unset($ffs[array_search('..', $ffs, true)]);
// prevent empty ordered elements
if (count($ffs) < 1)
return;
echo '<ul class = "mainFolder">';
foreach($ffs as $ff) {
if(is_dir($dirName.'/'.$ff)) {
echo "<li class = 'subFolder' ><span class = 'subFolderSpan' onclick = hideFolder(this.id) id = ".$ff.">".$ff;
getSubDirectories($dirName.'/'.$ff);
}
echo '</span></li>';
}
echo '</ul>';
}
//getSubDirectories("../deneme");
?>
这是我的 javascript 代码:
function hideFolder(ID) {
var elementID = ID;
var element = document.getElementById(elementID);
var firstChildOfelement = element.firstElementChild;
console.log(ID);
//console.log(element.childNodes);
if (firstChildOfelement.style.display == "none") {
firstChildOfelement.style.display = "";
}
else {
firstChildOfelement.style.display = "none";
}
}
这是我的 CSS 文件
.rootFolder {
margin: 0;
padding: 0;
cursor:pointer;
}
.subFolder {
/*margin-left: 2.5em;*/
/* list-style: square inside url("Folder-icon.png");*/
padding-left:2.5em;
/*list-style-type: disc;*/
}
.mainFolder {
padding:0 ;
}
.subFolderSpan:hover {
background-color: aquamarine;
}
我的问题是:当我在列表项上时,所有 parents 都改变了它们的背景颜色。不仅仅是我所在的项目。这是 CSS 问题。我试着做了一个没有PHP的无序列表结构,然后没有出现问题。
a screenshot for CSS problem
当我点击一个 span 时,onclick 影响不起作用。我收到这个错误
folderTree.js:7 Uncaught TypeError: Cannot read property 'firstElementChild' of null
at hideFolder (folderTree.js:7)
at HTMLSpanElement.onclick (getFolders.php:15)
如果我在控制台上编写相同的代码,它就可以工作。
感谢您的帮助...
我解决了这个问题。在我编辑此部分后:
echo '<ul class = "mainFolder">';
foreach($ffs as $ff){
if(is_dir($dirName.'/'.$ff)){
echo "<li class = 'subFolder' ><span class = 'subFolderSpan' onclick = hideFolder(this.id) id = ".$ff.">".$ff;
getSubDirectories($dirName.'/'.$ff);
}
echo '</span></li>';
}
echo '</ul>';
像那样:
echo '<ul class = "mainFolder">';
foreach($ffs as $ff){
if(is_dir($dirName.'/'.$ff)){
echo "<li class = 'subFolder' ><span class = 'subFolderSpan' onclick = hideFolder(this.id) id = ".$ff.">".$ff."</span>";
getSubDirectories($dirName.'/'.$ff);
}
echo '</li>';
}
echo '</ul>';