2011-09-14 23 views
6

Đấu tranh với DIV này trong một thời gian. đánh dấu của tôi đơn giản:Chèn DIV mới giữa hai DIV có cùng lớp và là anh chị em ngay lập tức

<div class=row> 
    <div class="somediv"></div> 
    <div class="somediv2"></div> 
    <div class="elem"></div> 
    <div class="elem"></div> 
    <div class="somediv3"></div> 
    <div class="somediv4"></div> 
<div class=row> 
.... 

Tôi cần phải tìm một cách để chọn tất cả DIV trên tài liệu sẵn sàng rằng: 1. có một lớp: elem 2. DIV tiếp theo của họ cũng có tên lớp: elem. Sau đó, tôi cần phải chèn một DIV mới giữa chúng:

<div class=row> 
    <div class="somediv2"></div> 
    <div class="elem"></div> 
    <div class="new"></div> 
    <div class="elem"></div> 
    <div class="somediv3"></div> 
    <div class="somediv4"></div> 
<div class=row> // and it goes... 


$(document).ready(function() { 
    if($('.elem').next().hasClass('.elem')) { 
     $('<div class="new"></div>').appendTo().prev('.elem'); 
    } else { 
    }); 
}); 

Trả lời

13

Hãy thử điều này:

$(document).ready(function() { 
    $('.elem + .elem').before($('<div class="new"></div>')); 
}); 

Đó là sử dụng selector anh chị em liền kề CSS của (+). Nó tìm thấy một phần tử với lớp .elem với một phần tử khác có lớp .elem ngay trước nó, sau đó thêm một div mới trước nó.

Fiddle: http://jsfiddle.net/4r2k4/

+0

ổn - Tôi thích câu trả lời của bạn tốt hơn so với tôi! http://jsfiddle.net/mrtsherman/kvg8N/1/ – mrtsherman

+0

Cảm ơn các câu đố. Tôi quên đề cập đến (xin lỗi) rằng html được tạo ra bởi javascript. Mã của bạn đang hoạt động và chỉ đơn giản là để hiểu trên một trang thông thường, nhưng tôi đoán vì nội dung được tạo ra này không hoạt động đối với tôi. Khi tôi đang sử dụng sự kiện nhấp chuột, tôi chỉ cần thêm live() vào hàm, làm thế nào có thể làm điều gì đó tương tự trong trường hợp này? – elbatron

+0

Nó hoạt động nếu tôi đính kèm nó vào một sự kiện nhấp chuột trong môi trường được đề cập ở trên. – elbatron

2

Mã của bạn có vẻ khá tốt với tôi. Bạn không cần phải quấn nó trong một each sao cho nó cháy trên mỗi cái?

$(document).ready(function() { 
    $('.elem').each(function() { 
    if($(this).next().hasClass('.elem')) { 
     $('<div class="new"></div>').appendTo().prev('.places'); 
    } else {} 
    }); 
}); 
3

Các giải pháp jQuery phi:

var divs, str; 

divs = document.getElementsByClassName('elem'); 

[].slice.call(divs).forEach(function (div) { 
    str = ' ' + div.nextElementSibling.className + ' '; 
    if (str.indexOf(' elem ') !== -1) { 
     div.insertAdjacentHTML('afterend', ' <div class="new">X</div> '); 
    } 
}); 

Live Demo:http://jsfiddle.net/2MfgB/2/

"Nhưng Šime, điều này không làm việc trong IE8 ...":P


Cập nhật:
giải pháp thay thế:

var divs = document.querySelectorAll('.elem + .elem'); 

[].slice.call(divs).forEach(function (div) { 
    div.insertAdjacentHTML('beforebegin', ' <div class="new">X</div> '); 
}); 

Live Demo:http://jsfiddle.net/2MfgB/3/

+0

Cảm ơn phiên bản JS. – elbatron

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