我可以使用.length()而不是整个文档计算一个div中的元素吗? - jQuery

时间:2014-04-17 23:39:50

标签: javascript jquery html css

我刚刚完成了一个很好的亚马逊风格"评论摘要"电子商务商店的柜台。它使用了“星星”中的一部分'使用.length()来计算评论的图像文件名很有效,但问题是它还会从页面的其他部分计算这些图像(例如相关产品,添加到购物车部分)。这些区域使用相同的"星级"图像作为评论部分,因此计数已关闭。

e.g。在这个页面 - http://www.siestahammocks.com.au/single-size-brazilian-hammock/只有两个5星评论和一个4星评论,但由于相关产品部分使用相同的星形图像(进一步下来)它计数八个5星评论和三个4星评论并且在页面顶部附近再次使用星星。

如果我能找到一种方法根据它们所在的div来计算星形图像,而不是计算整个文档中它们的数量,我可以解决这个问题。

我需要将var count1 / 2/3/4/5中的变量设置为我认为有点不同。

任何帮助都会很棒。谢谢!

这是我目前的剧本:

 <script>

    $(document).ready(function(){
var count1 = $('img[src$="IcoRating1.png"]').length;
var count2 = $('img[src$="IcoRating2.png"]').length;
var count3 = $('img[src$="IcoRating3.png"]').length;
var count4 = $('img[src$="IcoRating4.png"]').length;
var count5 = $('img[src$="IcoRating5.png"]').length;
$('.revcount1').append(count1);
$('.revcount2').append(count2);
$('.revcount3').append(count3);
$('.revcount4').append(count4);
$('.revcount5').append(count5);

var reviewtotal = count1 + count2 + count3 + count4 + count5;

    var counter1 = count1 / reviewtotal *100;
    var counter2 = count2 / reviewtotal *100;
    var counter3 = count3 / reviewtotal *100;
    var counter4 = count4 / reviewtotal *100;
    var counter5 = count5 / reviewtotal *100;

    $(".counter-bar5").css("width",counter5,"px");
    $(".counter-bar4").css("width",counter4,"px");
    $(".counter-bar3").css("width",counter3,"px");
    $(".counter-bar2").css("width",counter2,"px");
    $(".counter-bar1").css("width",counter1,"px");


});
        </script>

3 个答案:

答案 0 :(得分:1)

这样的内容只会在ID为myDiv的div中返回该图片的图片数。

var count1 = $('#myDiv img[src$="IcoRating1.png"]').length;

答案 1 :(得分:0)

$("#your-div").children().length

应该只返回直接的孩子数

这里是文档:https://api.jquery.com/children/

引自该来源:

  

.children()方法与.find()的区别仅在于.children()   在.sind()可以遍历时沿DOM树向下移动一个级别   在多个级别选择后代元素(孙子,   等)。还要注意,像大多数jQuery方法一样,.children()   不返回文本节点;让所有孩子都包括文字和   注释节点,使用.contents()。

答案 2 :(得分:0)

您的星形图片嵌套在<h4>的{​​&#34; ReviewTitle&#34;}中,因此您可以执行$('.ReviewTitle > img[src$="IcoRating5.png"]').length,而不是使用新的类或ID创建新的div。这只会带回.ReviewTitle的子项,然后选择你已经完成的图像。它比.children()更紧凑。我已经在你的页面上对它进行了测试,它看起来效果很好。