2012-12-07 24 views
7
<div id="calcwrapper"> 
    <img class="sugarcube" src="images/sugarcube.png" width="13" height="17"> 
    <div id="drinks"> 
     <a id="drink1" href=""><img src="images/drinkicon1.png" width="84" height="81"></a><div class="drink1"></div> 
    </div> 
</div> 

Trong ví dụ trên chỉ có nút đồ uống duy nhất, nhưng mã của tôi chứa tám nút. Mỗi cái có một div được phân loại tương ứng. Những gì tôi đang cố gắng làm là "động" lấy id của thẻ neo (id = "drink1") để thêm một hình ảnh đường mía nhân bản (img class = "sugarcube" ...) vào tên lớp tương đương div (class = "drink1"). Tôi hy vọng điều đó không gây nhầm lẫn. Có lẽ những nỗ lực không thành công dưới đây sẽ cung cấp cho bạn một số ý tưởng về những gì tôi đang cố gắng đạt được.Sử dụng jQuery để tìm một lớp theo tên ID

Cố gắng 1

$(".sugarcube").clone().attr("class", "sugarcube" + i).appendTo($(this).parent((".drink1").attr("class"))); 

Cố gắng 2 (cố gắng tìm một giải pháp làm việc thông qua giao diện điều khiển)

var className = $(this).attr("id"); 
console.log(className); 

console.log($(this).parent().children("div").hasClass(className)); 

Tôi đã tìm kiếm Google và StackOverflow và đã không tìm thấy bất kỳ mẫu mã. Cảm ơn sự giúp đỡ của bạn.

Dưới đây là hoàn toàn bối cảnh HTML code ...

<!DOCTYPE html> 
<html> 
<head> 
    <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.min.js"></script> 
    <script src="js/jquery-animate-css-rotate-scale.js"></script> 
    <script> 
     $(function() { 
      $(".sugarcube").hide(); 
      var max = 8; 
      function animateSugarcubes() { 
       for (var i=1; i<=max; i++) { 
        $(".sugarcube" + i).css("position", "absolute"); 
        $(".sugarcube" + i).css("top", Math.ceil(Math.random() * (50 - 20) + 20)); 
        $(".sugarcube" + i).css("left", Math.ceil(Math.random() * (85 - 40) + 40)); 
        $(".sugarcube" + i).hide(); 
       } 
      } 

      $("#drinks a").click(function() { 

       for (var i=1; i<=max; i++) { 
        // Attempt 1 
        $(".sugarcube").clone().attr("class", "sugarcube" + i).appendTo($(this).parent().children($(this).attr("id"))); 

        // Attempt 2 test code. 
        var className = $(this).attr("id"); 
        console.log($(this).parent().children("div").hasClass(className)); 
       } 

       return false; 
      }); 
      animateSugarcubes(); 
     }); 
    </script> 
</head> 
<body> 

<div id="calcwrapper"> 
    <img class="sugarcube" src="images/sugarcube.png" width="13" height="17"> 
    <div id="drinks"> 
     <a id="drink1" href=""><img src="images/drinkicon1.png" width="84" height="81"></a><div class="drink1"></div> 
     <a id="drink2" href=""><img src="images/drinkicon2.png" width="84" height="81"></a><div class="drink2"></div> 
     <a id="drink3" href=""><img src="images/drinkicon3.png" width="84" height="81"></a><div class="drink3"></div> 
     <a id="drink4" href=""><img src="images/drinkicon4.png" width="80" height="81"></a><div class="drink4"></div> 
     <a id="drink5" href=""><img src="images/drinkicon5.png" width="84" height="81"></a><div class="drink5"></div> 
     <a id="drink6" href=""><img src="images/drinkicon6.png" width="84" height="81"></a><div class="drink6"></div> 
     <a id="drink7" href=""><img src="images/drinkicon7.png" width="84" height="81"></a><div class="drink7"></div> 
     <a id="drink8" href=""><img src="images/drinkicon8.png" width="84" height="81"></a><div class="drink8"></div> 
    </div> 
</div> 

</body> 
</html> 

Xin lưu ý rằng thẻ neo sử dụng một id (id = "drink1") trong khi div sử dụng một lớp (class = "drink1")

+0

Trong bối cảnh những gì được gọi như vậy? 'Điều này' trong đoạn mã trên là gì? –

Trả lời

4

Nếu tôi trả lời câu hỏi của bạn theo nghĩa đen sau đó tôi có thể kết thúc với một cái gì đó như thế này:

var drinksLinks = $("#drinks a"); // get list of all a tags inside drinks 
drinksLinks.each(function() {  // perform function for each element 
    var element = $(this);   // get jquery object for the current element 
    var id = element.attr("id"); // get the id 
    var div = element.find("." + id); // find the element with class matching the id 

    $(".sugarcube").clone().appendTo(div); 
}); 

Tuy nhiên, bạn nên cố gắng tránh tham khảo điều theo lớp nếu bạn đang cố gắng tìm một yếu tố cụ thể. Đề nghị của tôi sẽ được thực sự chỉ là giả định rằng một div như drinks1 luôn là ngay bên cạnh một thẻ, sau đó bạn có thể làm một cái gì đó như:

var sugarcube = $(".sugarcube"); 
var drinksLinks = $("#drinks a"); // get list of all a tags inside drinks 

drinksLinks.each(function() { 
    var div = $(this).next(); // get the element next to the a tag 
    sugarcube.clone().appendTo(div); 
}); 

Một vài điều cần nhớ:

  • Hãy thử làm cho bộ chọn của bạn càng hẹp càng tốt khi tìm kiếm DOM có thể tốn kém.
  • Hãy cố gắng tìm kiếm DOM bằng id nếu có thể như đây là là natively nhanh hơn bởi lớp trong các trình duyệt cũ
  • Nếu bạn là khiến nhiều tài liệu tham khảo để cùng một nguyên tố, lưu trữ nó trong một biến như tôi có với yếu tố đường mía. Bằng cách này, bạn cắt xuống số lượng tìm kiếm của trang bạn cần để đạt được kết quả

Hy vọng điều này sẽ hữu ích!

+0

Phản hồi muộn màng. Chúng tôi quyết định thực hiện điều này dễ dàng và tạo ra một loạt các nhóm đường mía. Sau đó sử dụng jquery để chỉ đơn giản là animate chúng xuống sau khi nút được nhấn. –

+0

Không có vấn đề gì. Nếu điều này đã giúp chút nào, hãy đánh dấu là câu trả lời để tránh câu hỏi này đi xuống dưới dạng spam. Cảm ơn! –

2

Nếu bạn đang sử dụng các phần tử có số nhận dạng, thì hãy sử dụng "lớp" thay vì "id". "id" phải là duy nhất. Trong ví dụ đã cho nó được sử dụng cho di và cũng là một thẻ.

không phải là một ý tưởng hay! < - Xin lỗi, tôi nghĩ có hai id có cùng tên

tính năng này có hiệu quả đối với tôi. Nhưng nó có thể là tôi đã không hiểu câu hỏi của bạn một cách chính xác

$('#drink1').clone().attr('id','drink2').appendTo('#drinks') 
+0

Tôi không thấy 'id' trùng lặp trong html đó. –

1

Làm thế nào về một cái gì đó như thế này:

var id = $(this).attr('id'); 
var targetDiv = $('.' + id); 

Int dụ div mục tiêu của mình sẽ là divs với tên lớp phù hợp mà ID