2013-03-09 3 views
1

Обычно это не проблема, но на этот раз я не контролирую dom. Во всяком случаеПолучение следующего брата с классом в zepto

<dt>foo</dt> 
<dd>bar</dd> 
<dd>bar 
    <div id="myElem">baz</div> 
</dd> 
<dd>bar</dd> 
<dd>bar</dd> 
<dd class="moo">bar</dd> <-- I want to get this one 
<dd>bar</dd> 
<dd>bar</dd> 
<dd class="moo">bar</dd> 
<dd>bar</dd> 
<dd>bar</dd> 

Вот что я пытался

$('#myElem').closest('dd').next('.moo').something(); 
$('#myElem').closest('dd').nextUntil('.moo').something(); 

Однако не из них получить следующий родственный с классом.

Кто-нибудь знает, как пройти это?

ответ

2

Попробуйте

$('#myElem').closest('dd').nextAll('.moo:first').something(); 

или

$('#myElem').closest('dd').nextUntil('.moo').next().something(); 

Я не знаю, но зепто от быстрой проверки Документов он не выглядит, как вы можете сделать это с простым цепь. Попробуйте

var $dd = $('#myElem').closest('dd'); 
var $moo = $dd.next(); 
while (!$moo.is('.moo')){ 
    $moo = $moo.next(); 
    if ($moo.length == 0) break; 
} 

DEMO

+0

извините, мне нужно обновить мой вопрос – Fresheyeball

+0

zepto не jquery my bad – Fresheyeball

+0

жаль, что так долго чтобы вернуться к вам. Работал как шарм, и спасибо. – Fresheyeball

2

Вы можете выполнить, создав новый простой метод:

/** 
* Get the next element of a particular class, relative to a different element. 
*/ 
var nextOfClass = function(relativeTo, className) { 
    var el = relativeTo, nextEl; 

    // Leading period will confuse Zepto. 
    if (className[0] === '.') className = className.slice(1); 

    while (el.next()) { 

     // If target element is found, stop 
     if (el.hasClass(className)) return el; 

     nextEl = el.next(); 
     if (nextEl.length === 0) { 
      // No more siblings. Go up in DOM and restart loop to check parent 
      el = el.parent(); 
      continue; 
     } 

     el = nextEl; 

     // End of doc. Give up. 
     if (el.parent().length === 0) return false; 
    } 
}; 

Тогда вы можете просто использовать следующий метод:

var moo = nextOfClass($("#myElem"), '.moo'); 
+1

-1 Расширение собственного 'Object.prototype' для какой-либо конкретной библиотеки является действительно плохой практикой. Что происходит, когда кто-то делает '{} .nextOfClass ('. Moo');'? Лучше расширить zepto должным образом. http://zeptojs.com/#$.fn – Fresheyeball

+0

Я обновил свой ответ в ответ на ваши отзывы. – hawkharris

+0

+1, намного лучше. Но почему бы не использовать '$ .fn'? Это позволит использовать '$ ('# myElem'). NextOfClass ('. Moo')' без расширения 'Object'. – Fresheyeball

Смежные вопросы