2011-10-21 90 views
1

我在播放器表div中創建了一個div標籤數組。我正在使用class .players獲取所有div標籤。類名爲.players的div具有輸入fied和內部鏈接字段。我希望能夠操縱這些(刪除,添加類,等...)使用JS訪問HTML對象內的對象

我想會的工作會是這樣的:

$(divarray[j]+' .link').hide(); 
$(divarray[j]+' a').remove('.link'); 

但它不工作。有什麼想法嗎?我敢肯定,這是簡單的東西,但它是我第一次在JS :)

var divarray = $('#player-table > .players'); 
     for(var j = 0; j < 10; j++){ 
     $(divarray[j]).removeClass("players"); 
     $(divarray[j]).addClass("selected_players"); 
     $('#debug').append(divarray[j]); 
     $(divarray[j]+' a').hide(); 
    } 

回答

3

首先,你不能只是串聯jQuery對象或DOM節點與字符串來創建新的選擇器。 jQuery爲這種情況提供了方法,在這種情況下,你已經有了一個對象或DOM節點,並且想要找到其他相關的節點。

其次,用jQuery有更好的方法來處理一組元素。這裏是你的代碼更多的類似jQuery的方式。這只是一個例子,因爲我不知道HTML結構。你必須調整它,以便它選擇並應用到正確的元素。

$('#player-table > .players').slice(0,10) // gets the first 10 elements 
.removeClass("players")     // removes the class from all of them 
.addClass("selected_players")   // adds the class 
.find('a').hide().end()     // finds all descendant links and hides them 
.appendTo('#debug');      // appends all elements to `#debug` 

正如你所看到的,最後一行只有一個分號。這意味着整個代碼塊只是一個語句,但將其分成幾行可以提高可讀性。

它的工作原因是fluent interface,jQuery大量使用的概念。它可以避免一次又一次地創建jQuery對象,就像你一樣($(divarray[j]))。

另一個優點是您可以一次處理整個元素集,並且不必像每個元素一樣遍歷每個元素,就像使用「普通」DOM操作方法一樣。我想推薦MDN JavaScript Guide
jQuery有幾個tutorials和一個非常好的API documentation

徹底閱讀以瞭解基本知識。如果不先閱讀說明書,就不能期望能夠使用工具。

+0

正是我想知道的。不幸的是,由於某些交付物的時間限制,我無法通過所有文檔爲JS和JQuery提供應有的時間。感謝您的鏈接,我會在接下來的幾天內通過他們。 – Tony

1

試試這個istructions

$(divarray[j]).find('.link').hide(); 
$(divarray[j]).find('a').remove('.link'); 

也嘗試

$(divarray[j]).find('.link:first').hide(); 

如果您只需要在工作第一個元素

希望它有幫助