2011-10-12 36 views
8

Tôi đang tạo một trang web có chiều rộng nổi. Người dùng sử dụng màn hình từ độ phân giải HD đầy đủ đến 600px trên điện thoại thông minh có vẻ như một ý tưởng khá hay. Điều này mang đến một vấn đề rất thú vị.Thay đổi thứ tự của các phần tử

Khi người dùng sử dụng độ phân giải nhỏ hơn mức tối ưu, trang sẽ nhận được nhiều chiều cao hơn. Điều này có nghĩa là có thể hữu ích khi thay đổi thứ tự của một số phần tử (ví dụ: một số hình ảnh, hộp tìm kiếm hoặc điều hướng) để làm cho trang dễ đọc hơn mà không cần nhiều scrooling.

Vì vậy, tôi cần có khả năng truy cập DOM và thay đổi thứ tự của một số phần tử trang (hoán đổi chúng).

phép nói rằng tôi có một danh sách và cần phải trao đổi mục 1 và 2.

<ul> 
    <li>1</li> 
    <li>2</li> 
</ul> 

Tôi tìm thấy một giải pháp dựa trên phụ đã ghi các yếu tố để <ul> bằng cách sử dụng chức năng appendChild. Tuy nhiên có một vấn đề với các nút văn bản và nó được thực sự phức tạp để làm điều đó cho cấu trúc phần tử khó khăn hơn, kể từ khi cần tái tạo lại toàn bộ.

Bạn có đề xuất nào để cải thiện nó không?

+1

Thời gian đầu tư vào việc học jQuery. Nó làm cho loại hoạt động này dễ dàng hơn nhiều. –

+0

Truy vấn phương tiện ?. –

+0

Bạn có thể, xin vui lòng, cụ thể hơn? Tôi bây giờ là thư viện, nhưng một số liên kết đến API hữu ích cho việc này sẽ rất hữu ích. –

Trả lời

11

Đối với trường hợp này đơn giản (trao đổi chỉ có hai yếu tố), bạn chỉ có thể sử dụng appendChild() (fiddle)

var list = document.querySelector("ul"); 
list.appendChild(list.firstElementChild); 

Nút cùng không thể tồn tại ở nhiều vị trí; do đó, nó bị xóa khỏi vị trí hiện tại của nó và được đặt ở cuối bộ sưu tập.

Nếu bạn muốn làm phân loại phức tạp hơn, có lẽ bạn nên tạo một mảng từ childNodes (yaf) và nhận được tất cả điên:

var list = document.querySelector("ul"); 
var items = list.querySelectorAll("li"); 
var sortedList = Array.from(items).sort(function(a, b) { 
    var c = a.firstElementChild.textContent, 
    d = b.firstElementChild.textContent; 
    return c < d ? -1 : c > d ? 1 : 0; 
}); 
for (let item of sortedList) { 
    list.appendChild(item); 
} 
0

sẽ không trao đổi innerHTML cũng làm việc?

var myList = document.getElementsByTagName("ul")[0]; 
temp = myList.getElementsByTagName("li")[0].innerHTML; 
myList.getElementsByTagName("li")[0].innerHTML = myList.getElementsByTagName("li")[1].innerHTML; 
myList.getElementsByTagName("li")[1].innerHTML = temp; 
+1

Hãy cẩn thận khi viết vào innerHTML nó có thể có tác dụng không mong muốn trên trình xử lý sự kiện và các thuộc tính khác. Ví dụ: http://stackoverflow.com/a/5113120/370786 – Rolf

+0

nó sẽ xảy ra khi bạn thử điều này với document.body nhưng không phải trong trường hợp này. một ví dụ đơn giản -> https://jsfiddle.net/tzv5db93/ –

Các vấn đề liên quan