【问题标题】:Hide list element if $count variable has value zero如果 $count 变量的值为零,则隐藏列表元素
【发布时间】:2017-03-25 06:02:58
【问题描述】:

如果产品$count 的值为零,我想隐藏类别元素<li>。 这是我正在处理的页面:http://www.hotsales.com.br/procurar/

“类别”是类别过滤器。如果类别行的产品为零,则必须将其隐藏(可能是style="display: none;")。选择某些商店(Loja)时,由于商店可能是关于鞋子的,因此许多类别在不应该显示时会显示为“计算机(0)”。

我尝试将它放在 foreach 循环的末尾 if ($count = 0) {document.getElementByTagName("li").style.display = "none"} 但不起作用。这是显示过滤器的实际整个功能。 <li> 元素是在 $count 定义后 4 行回显生成的:

/*
List categories on the search sidebar
*/
if( !function_exists( 'list_search_sidebar_cats' ) ){
function list_search_sidebar_cats( $ancestors, $parent, $selected = '', $search_show_count, $permalink ){
global $slugs;
$children = get_terms( 'offer_cat', array( 'parent' => $parent ) );
if( !empty( $children ) ){
    echo '<ul class="list-unstyled">';
    foreach( $children as $child ){
        $li_class = in_array( $child->term_id, $ancestors ) ? 'active' : '';
        if( !empty( $selected ) ){
            $li_class .= $child->slug == $selected->slug ? ' current' : '';
        }

        $count = '';
        if( $search_show_count == 'yes' ){
            $count = custom_term_count( $child, 'offer_cat' );
        }



        if( empty( $ancestors ) || ( !empty( $ancestors ) && in_array( $child->term_id, $ancestors ) ) || ( !empty( $ancestors ) && !empty( $selected ) && $child->parent == $selected->term_id ) ){
            echo '<li style="display:flex;" class="'.esc_attr( $li_class ).'"><a href="javascript:;" data-cat="'.esc_attr( $child->slug ).'">'.$child->name.' <span class="count">('.$count.')</span></a>';
            if( !empty( $li_class ) ){
                list_search_sidebar_cats( $ancestors, $child->term_id, $selected, $search_show_count, $permalink );
                echo '</li>';
     }
            else{
                echo '</li>';
            }
     }

    }
    echo '</ul>';
}

} }

【问题讨论】:

  • if ($count = 0) 语法错误。
  • 在回显时将其直接写入&lt;li&gt; 元素! &lt;li style="display: none;"&gt;
  • empty( $ancestors ) || ( !empty( $ancestors ),呜呜呜,现在怎么办?添加这个似乎有点过时了。
  • document.getElementByTagName("li").style.display = "none" 不起作用。 getElementByTagName 返回一个类似数组的对象。您需要遍历它,然后在每个元素的循环中使用style.display = 'none'
  • 谢谢大家! Jeff 的建议完美解决了问题!

标签: javascript php jquery html css


【解决方案1】:

渲染后无需将javascript放入该播放中以更改它。
您可以轻松地将其包含在初始输出中:

// please review your conditions here, they don't make too much sense.
//      if this is true    then this is false   (and vice versa)
if( empty( $ancestors ) || ( !empty( $ancestors ) && in_array( $child->term_id, $ancestors ) ) || ( !empty( $ancestors ) && !empty( $selected ) && $child->parent == $selected->term_id ) ){
       // here's the fix:
       $display = $count>0 ? "flex" : "none";
       echo '<li style="display:'.$display.';" class="'.esc_attr( $li_class ).'"><a href="javascript:;" data-cat="'.esc_attr( $child->slug ).'">'.$child->name.' <span class="count">('.$count.')</span></a>';
       if( !empty( $li_class ) ){
            list_search_sidebar_cats( $ancestors, $child->term_id, $selected, $search_show_count, $permalink );
            echo '</li>';
       } else{
            echo '</li>';
       }
}

【讨论】:

  • 嗨,Jeff.. 使用您的代码,所有 li 元素都被隐藏了。在 Mozilla 上检查它们,它们被渲染,但使用 display: none。你认为这与 $count 有关吗?谢谢
  • 现在可以了!谢谢你,杰夫!真的是因为 $count 函数返回标签内的值。 return '&lt;span class="count"&gt;'.$count.'&lt;/span&gt;'; 所以我把它改成了return $count; 上帝保佑你!!
  • 对于评论编辑,+1。如果他能以某种方式将此信息转发给@Eric,我们就祝福上帝吧。
  • 利他的人是地球上上帝的手,就像好心的撒玛利亚人一样。当然,上帝会奖励所有这些人。
猜你喜欢
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 2013-04-08
  • 2016-07-16
相关资源
最近更新 更多