我有一個嵌套的可排序列表,它可以動態添加或刪除項目並且可以嵌套n層深度。在嵌套時,一個新的ul元素被注入到任何li元素被選爲父類中。列表中的初始狀態是像下面這樣:CSS選擇器僅用於定位直接子對象而不是其他相同的子對象
<ul id="parent">
<li id="One"><a href="" class="listLink"><span class="position">1</span>One</a></li>
<li id="Two"><a href="" class="listLink"><span class="position">2</span>Two</a></li>
<li id="Three"><a href="" class="listLink"><span class="position">3</span>Three</a>
<ul>
<li id="A"><a href="" class="listLink"><span class="position">1</span>A</a></li>
<li id="B"><a href="" class="listLink"><span class="position">2</span>B</a></li>
<li id="C"><a href="" class="listLink"><span class="position">3</span>C</a></li>
<li id="D"><a href="" class="listLink"><span class="position">4</span>D</a></li>
<li id="E"><a href="" class="listLink"><span class="position">5</span>E</a></li>
<li id="F"><a href="" class="listLink"><span class="position">6</span>F</a></li>
</ul>
</li>
<li id="Four"><a href="" class="listLink"><span class="position">4</span>Four</a></li>
<li id="Five"><a href="" class="listLink"><span class="position">5</span>Five</a></li>
<li id="Six"><a href="" class="listLink"><span class="position">6</span>Six</a></li>
</ul>
我使用MooTools的做排序等,並能正常工作,但我有麻煩的排序正確復位位置文本。我嘗試使用的每個CSS選擇器還包括兒童的全部,而不僅僅是屬於列表中的li元素,並且不屬於子列表。假設除了id,position和text之外,所有列表中的每個li元素都與其他元素相同。是否有一個選擇器只能獲得直接的孩子?有沒有另一種方法來做到這一點?
我嘗試了一些孩子選擇喜歡提到的那些:
ul > li
會選擇所有 li元素是一個UL的孩子,而不僅僅是眼前的孩子#parent > li
是否與上面相同。
這是我當前正在運行的函數,當一個項目被丟棄時,它不處理排序,它工作正常,只是更新位置。請注意,這也是MooTools的語法:
var drop = function(el){
el.getParents('ul').reverse().each(function(item){
var posCount = 1;
item.getElements('li a span[class=position]').each(function(pos){
pos.set('text', posCount);
posCount++;
});
});
}
目前,主要水平變化的任何項目訂單將重新編號1-12的一切,甚至是子列表。更改子列表中的任何項目將爲該列表提供正確的編號,但會導致父列表錯誤地計算編號中的所有子li元素。
我覺得這是一個醜陋的黑客攻擊,但它的工作原理:
var drop = function(){
var ulCount = 1;
$$('ul').each(function(item){
if(item.get('id') != 'parent') {
item.set('id', 'id-'+ulCount);
}
var elId = item.get('id');
var posCount = 1;
$(document).getElements('#'+elId+'>li>a>span[class=position]').each(function(pos){
pos.set('text', posCount);
posCount++;
});
ulCount++;
});
}
謝謝,但MooTools處理IE6問題,所以這不是我所追求的。我正在尋找重置跨度文本的方法,以指示該列表的正確位置,但不包括父或子列表,這是問題出現的地方。 – VirtuosiMedia 2009-04-08 22:40:42