2013-03-20 81 views
0

我在我的Concrete5模板中有一些代码,如果用户没有上传图库图片,我不需要这些代码。因此,我需要删除下面的代码,如果它不包含图片:使用jQuery或PHP从页面中删除多余的HTML代码?

<ul class="Gal_2"> 
     <li class="Frst">  
     </li> 

     <li> 
     </li> 
</ul> 

它看起来像这样,当它具有图像:

<ul class="Gal_2"> 
    <li class="Frst"> 
     <p><a rel="group" href="/concrete/files/2113/6352/1788/Lighthouse.jpg"><img width="1024" height="768" alt="Lighthouse.jpg" src="/concrete/files/2113/6352/1788/Lighthouse.jpg"></a> 
     </p> 
    </li> 
    <li> 
     <p><a rel="group" href="/concrete/concrete/themes/greek_yogurt/Images/TEMP_IMG1.jpg"><img width="800" height="537" alt="Island Rab" src="/concrete/concrete/themes/greek_yogurt/Images/TEMP_IMG1.jpg" style="float: left;"></a> 
     </p> 
    </li> 
</ul> 

什么会检查并删除标记的最快方法?

+2

你应该能生成HTML页面的过程中,以检查此对PHP服务器端。 – MatRt 2013-03-20 08:55:00

+0

不是真的......因为它使用自定义块来输出HTML标记。而不是降低投票?也许一些帮助或建议在PHP会很好! – PriceCheaperton 2013-03-20 08:57:36

+1

在服务器端验证 – 2013-03-20 08:58:33

回答

4

尝试使用:not:has

Live Demo

$('.Gal_2:not(:has(a))').remove(); 
+0

+1如果将'#Gal_2'更改为'.Gal_2',它就可以工作。 – insertusernamehere 2013-03-20 08:59:21

+0

谢谢@insertusernamehere,真是太好了。 – Adil 2013-03-20 09:01:00

1

你可以做这样的:(!$( 'Gal_2 IMG')长度)

如果{('。Gal_2')。remove(); }

固定版本还有的情况下,一个.Gal_2与图像等,没有他们:

$('.Gal_2').each(function() { 
    if (! $(this).find('img').length) { 
     $(this).remove(); 
    } 
}); 
+1

如果存在多个.Gal_2列表,并且其中一个列表中包含图像,则不会删除图库元素。 – beerwin 2013-03-20 09:04:03

+0

感谢您发现这一点,我已经用固定版本更新了我的答案。 – Nelson 2013-03-20 11:09:06

+0

该解决方案将删除其中包含图像的解决方案。 OP想要相反。 – beerwin 2013-03-20 12:29:55

0

你可能会使用类似:

if (!$('img', 'ul.Gal_2 li')) { 
    $('ul.Gal_2 li').hide(); 
    // or 
    $('ul.Gal_2 li').remove(); 
} 
2

试着这么做如下:

<?php if (count($images)):?> 
<ul class="Gal_2"> 
    <?php foreach($images as $index => $image):?> 
     <li <?php echo $index == 0 ? 'class="Frst"' : ''?>> 
      <p> 
       <a rel="group" href="<?php echo $image['path']?>"> 
        <img width="1024" height="768" src="<?php echo $image['path']?>"> 
       </a> 
      </p> 
     </li> 
    <?php endforeach?> 
</ul> 
<?php endif?> 

最好在服务器端过滤出来,因为用户不需要这些空元素 - 首先必须使用HTTP请求传输它们,然后必须使用JavaScript删除它们。

+0

谢谢你抽出时间让我看看这个......我认为它是最好的学习方式,通过答案让我可以想象它。知识应该分享..再次感谢你.. – PriceCheaperton 2013-03-20 09:00:41

0

另一个

if($(".Frst").children().length) ? **do smthng** : $(".Gal_2").remove();