2013-10-09 29 views
4

我遇到了一些麻煩。我有以下的HTML代碼檢測是否childelement立即來到父母div開始後

<div id="parentdiv"> 
     This is test immediately in a parent div, not within child element 
     many more text comes. 
     <p class="childelement">This is under child element</p> 
     Another bunch of text also comes here 
    </div> 

p tagchildelement類可在parentdiv出現一個或更多的時間在任何地方。所有我想要做的是檢測低於或者兩種情況之一: -

  1. 檢測是否childelement父 DIV的開始或不後,立即來了。
  2. 檢測是否存在前childelement

我基本上想要做的是,如果childelement滿足2點任何文字,然後我將邊距風格附加到這個元素,否則不是。

我想什麼是

$('.childelement:gt(0)').css({'margin-top':'5pt'}); 

這適用於所有childelement在父DIV,如果有childelement開始父DIV的標籤之後。但是,如果我刪除childelement的第一個匹配項,則margin-top css將在第二個childelement中丟失,因爲刪除第一個元素後,其index becomes 0

只是一個暗示對我來說已經足夠了。

任何幫助將高度很可觀

回答

3

您可以使用.filter()方法和閱讀previousSibling屬性的元素,請注意,我用$.trim()排除,如果你想沒有可見的字符,textNodes包括那些節點,您可以刪除該方法。

$('#parentdiv .childelement:first-child').filter(function() { 
    return this.previousSibling 
      && $.trim(this.previousSibling.nodeValue).length; 
}).css({'margin-top':'5pt'}); 

http://jsfiddle.net/Tcb4s/


通過@LoVeSmItH作出的更新:

$('#parentdiv .childelement:first-child').filter(function() { 
    var sit=this.previousSibling && $.trim(this.previousSibling.nodeValue).length; 
    if ($.trim(sit)!="") { 
     return sit; 
    } else { 
     $('.childelement:gt(0)').css({'margin-top':'5pt'}); 
    } 
}).css({'margin-top':'5pt'}); 

我的基礎上,編輯建議:

var $child = $('#parentdiv .childelement'), 
    $first = $child.filter(':first-child').filter(function() { 
       return this.previousSibling 
         && $.trim(this.previousSibling.nodeValue).length; 
      }); 

if ($first.length) $first.css({'margin-top':'5pt'}); 
else $child.not(':first').css({'margin-top':'5pt'}); 
+0

這就像一個魅力。當沒有「childelement」被刪除時,沒有什麼問題,第二個「childelement」會失去「margin-top」css。我已經解決了這個問題,我會更新你的答案。萬分感謝!你救了我的一天 – WatsMyName