2016-02-26 65 views
2

我有一个jQuery each循环,它在我的页面上寻找类.big-box-300x250的所有内容,并为Google DFP附加一些广告脚本。jQuery每个循环都触发if语句在每个循环中

我想要发生的是,如果包含div有一个iFrame它应该触发if语句并设置父母的高度。我遇到的问题是每次脚本循环它总是触发if语句,并且似乎没有关于它隐藏和显示的选择。

$('.big-box-300x250').each(function(index) { 
     var display = $(this).data("desktop-display"); 
     if (display == true){ 

      var feedData = $(this).data('ad-type'); 
      var ad_script = '<script type="text/javascript">googletag.cmd.push(function() { googletag.display("' + feedData + '"); });</script>'; 
      $(this).append(ad_script); 

      if ($(this).has('iframe')) { 
       console.log("Triggering"); 
       $(this).parent().height(250) 
       $(this).parent().css("margin", "20px 0") 
       $(this).show(); 
      } 
     } 
    }); 

从feedData变量拉入的数据是唯一的,也用于ID。例如在div可能是这个样子:

<div id="div-gpt-ad-1450382754763-1" class="pb-ad-container big-box-300x250 border-bottom-hairline" data-mobile-display="false" data-desktop-display="true" data-ad-type="div-gpt-ad-1450382754763-1" style=""> 

我怎样才能解决这个脚本,以便在每个循环,它看起来在每个广告格设置单独,确定它是否有一个IFRAME,然后才去相应地运行该脚本到下一个。

这就是生成的标记的样子。前两个是工作广告,第二个是没有内容的空广告。前两个是我想要触发if语句的那个​​,但是它触发了所有这些语句。

enter image description here

+0

你有任何类元素'big-box-300x250'嵌套在类别为'big-box-300x250'的其他元素中? –

+0

@MattBrowne负。在页面上有多个大盒子300x250的项目,但它们不是彼此嵌套的。 –

回答

0

试试这个:

if ($(this).has('iframe').length) 
1

在这里,你应该检查.lengthis >0,因为.has()方法不返回boolean

if ($(this).has('iframe').length>0) { 
+1

甚至不需要'> 0'部分...长度可以用作布尔值 – charlietfl

+0

是的。只是为了一些额外的澄清(现在我明白了这个问题)... has()的返回值将始终是一个jQuery对象(即使它是空的),所以它总是会计算为true。 –

+0

@马特布朗确切 –