我有一个像php / mysql这样生成的动态菜单
<ul>
<li>Category 1
<ul>
<li>Genre 1</li>
<li>Genre 2</li>
</ul>
</li>
<li>Category 2
<ul>
<li>Genre 1</li>
<li>Genre 2</li>
</ul>
</li>
<li>Category 3
<ul>
<li>Genre 1</li>
<li>Genre 2</li>
</ul>
</li>
</ul>
为了节省服务器请求,有一个cron作业设置,每天一次将其打印到外部html文件(在整个站点中使用)。
是否可以在此多级ul上运行类似mysql的搜索并返回结果? 即,
select 'li' WHERE genre LIKE "$search"
返回类别和类型。
感谢大家的时间和帮助。
答案 0 :(得分:0)
我将在序言中说所有鼓励你不这样做的评论是正确的。您应该在数据库中执行此操作。说真的,不要这样做!
但是 ...如果我假装没有涉及数据库,我们只是试图解决HTML结构的问题 like a数据库,根据您的要求,我尝试jQuery。我做了一个看起来像这样的功能:
function list_search(query) {
var results = $("li:contains("+query+")")
if (results.parents('li').length > 0) {
return results.parents('li');
}else{
return $("li:contains("+query+")");
}
这特别针对您的列表结构进行了微调 - 如果您列出了第三级或更多,您必须重新访问它。如果你查询&#34;类别3&#34;它会将<li>
元素与子列表一起返回。如果您查询&#34;流派2&#34;您将获得每个类别的<li>
元素,因为您的示例中的每个元素都包含一个&#34;类型2&#34;项目,我认为这是你正在寻找的行为。
显然,这是一个客户端解决方案,如果您尝试使用cron-jobs等等在服务器上执行此操作,这可能无济于事。看起来您正在使用基于标签的PHP。方便地,有一个基于jQuery的名为phpQuery的漂亮库,我们可以很容易地将它传输到:
$document = phpQuery::newDocumentFile('badidea.html');
function list_query($query) {
$result = pq('li:contains('.$query.')');
if (strlen($result->parents("li")) > 0) {
return $result->parents("li");
}else{
return $result;
}
}
FWIW Github版本的phpQuery似乎比Google Code版本提前了大约2年。 ->parents()
方法似乎不在Google代码网站的示例中,因此我不确定它是否受支持,但它适用于Github版本。
所以...我希望你能找到一种方法从数据库中解决这个问题,而这个例子可以满足你的好奇心。