0

私は次のものを持ってdivいますchildren

<div>
  <img src="http://zferral.com">
  <!--zferral is an invisible image analytics tool-->
  <script>Some Comment</script>
</div>

この div には 3 つの項目があります。、scriptimageおよびcomment

それらが本当にこのdiv内にあるかどうかを知り、ブール値を返す必要があります。

これをjqueryで使用できるようにする必要があるため、目に見える子がない場合はdivを非表示にできます。

これらはすべて返されtrueます (下)。一番上の例は を返すはずfalseです。

<div>
  <img src="http://zferral.com">
  <!--zferral is an invisible image analytics tool-->
  <script>Some Comment</script>
  <p>Hello</p>
</div>

<div>
  <img src="http://zferral.com">
  <!--zferral is an invisible image analytics tool-->
  <script>Some Comment</script>
  Hello
</div>

<div>
  <img src="http://zferral.com">
  <!--zferral is an invisible image analytics tool-->
  <script>Some Comment</script>
  <img src="anything other than zferral">
</div>

私の進歩

私は.clone()divをコピーするために使用していましたが、すべてのスクリプトタグがそれらを削除していることがわかります。

すべてのコメントを解析して削除するには、正規表現を使用する必要があります。

次に、正規表現と .find を使用して、リンク内の zferral を含む画像を取得します。

最後に文字列が必要<div></div>で、それが空であることを確認できます。

私は立ち往生しており、これが最善のアプローチであるかどうかは正確にはわかりません。

  part.additional = function(){

   var test = $('.group[style="border: none;"]').clone().find('script').remove().end();


   ((jQuery('#content .group').length > 1 && jQuery('#content .group:nth-child(2)').find('*:visible').length !== 0)) ? jQuery('#content').clone(true).attr('id','additional').find('.group:first').remove().end().find('script').remove().end() : false ;

  }
  var a = jQuery('#content .group').length > 1;
  var b = jQuery('#content').clone(true).attr('id','additional').find('.group:first').remove().end().find('script').remove().end().find('style').remove().end().find('[style="border: none;"]').removeAttr('style').end();
  var c = jQuery('#content').clone(true).attr('id','additional').find('.group:first').remove().end().find('script').remove().end().find('style').remove().end().find('[style="border: none;"]').removeAttr('style').end().html().replace(/\n|\r|(\s\s)/g,'');
  var d = '<div class="group"></div>' == c;
  var e = (!d) ? b : false;
4

4 に答える 4

1

何をしようとしているのかは明確ではありませんが、div に何かが含まれているかどうかをテストしようとしている場合は、次のようにすることができます。

$("div").contents().length > 0

$("div") は複数の div を選択することに注意してください。これを確実に機能させたい場合は、おそらく id 属性を使用して、他のものと区別する何らかの方法が必要です。

于 2012-07-09T23:19:24.767 に答える
0

これは、特定のdiv内の DOM ノードをチェックして、スタイルが.hasVisibleContentdisplaynone

HTMLは次のとおりです。

<div id="does-not-have-visable-content">
  <img src="https://mbsy.co/embed/v2/img/?mbsy_username=USERNAME&mbsy_campaign_uid=000&mbsy_email=example@example.com&mbsy_revenue=0.00" style="border: none; display: none" alt="" />
  <script>var x = "hello world"</script>
  <!-- hello world -->
</div>

<div id="has-visable-content">
  <img src="https://mbsy.co/embed/v2/img/?mbsy_username=USERNAME&mbsy_campaign_uid=000&mbsy_email=example@example.com&mbsy_revenue=0.00" style="border: none; display: none" alt="" />
  <script>var x = "hello world"</script>
  <p>Visible Content</p>
  <!-- hello world -->
</div>

これがJavaScriptです:

function hasVisibleContent (selector) {
  var ancestor = document.querySelector(selector)
  var descendents = ancestor.getElementsByTagName('*')
  var hasVisableContent = false
  var i, $e, d;
  for (i = 0; i < descendents.length; ++i) {
    $e = descendents[i]
    var display = getComputedStyle($e).getPropertyValue('display')
    if(display !== 'none') hasVisableContent = true
//     console.log([$e.nodeType, $e.tagName, display])
  }
  return hasVisableContent
}

var visibleContent

visibleContent = hasVisibleContent('#does-not-have-visable-content')
if (visibleContent === false) console.log('all good')

visibleContent = hasVisibleContent('#has-visable-content')
if (visibleContent === true) console.log('all good')
于 2016-04-08T00:57:08.810 に答える
0

これは機能するはずです(内部に改行がない場合divs

$('div').clone().each(function(k){ 
    var $div = $(this); 
    $div.contents().each(function(){
        if(this.nodeType === 8 || this.outerHTML === '<img src="http://zferral.com">'){
            return true;
        } 
        if(this.nodeType === 3 ||  $(this).css('display') !== 'none'){ 
            console.log('Visible ' + k);
            return;
        }
    });
});
于 2012-07-10T00:07:56.563 に答える
0

私の理解では、zreferral イメージとスクリプト (目に見えるもの) 以外に何かがある場合は、div ごとにテストしたいということです。スクリプトと zreferral を含む div 内に div (またはスパン) を追加できます。例えば:

<div>
  <img src="http://zferral.com">
  <!--zferral is an invisible image analytics tool-->
  <script>Some Comment</script>
  <p>Hello</p>
  <div id="visibleContent1">
  </div>
</div>

<div>
  <img src="http://zferral.com">
  <!--zferral is an invisible image analytics tool-->
  <script>Some Comment</script>
  <p>Hello</p>
  <div id="visibleContent2">
  </div>
</div>

<div>
  <img src="http://zferral.com">
  <!--zferral is an invisible image analytics tool-->
  <script>Some Comment</script>
  <div id="visibleContent3">
  <img src="anything other than zferral">
  </div>
</div>

次に、次のようにブール値を取得できます。

$('#visibleContent1').html().length>1 //or 0 if you don't put a linebreak
于 2012-07-10T00:13:16.340 に答える