علامة محددة من الوالدين (jQuery)
سؤال
لغة البرمجة:
<div class="featured">
<h4><a href="#">Title 1</a></h4>
<a href="#"><img src="image.png" class="image"/></a>
<p><a href="#"></a><br />
Description goes here</p>
</div>
<div class="featured">
<h4><a href="#">Title 2</a></h4>
<a href="#"><img src="image.png" class="image"/></a>
<p><a href="#"></a></p>
<p>Description goes here</p>
</div>
.. كيف أقوم بتجريد كل شيء <p>
العلامات من.
شكرًا
المحلول
هذا يعمل ، ولكن فقط لأن عناصر الفقرة الخاصة بك موجودة في نهاية divs الخاص بك:
$(".featured p").each(function(){
var content = $(this).html();
$(this).parent().append(content);
$(this).remove();
});
نصائح أخرى
الدفع "المكون الإضافي" لفهم بن Alman
$.fn.unwrap = function() {
this.parent(':not(body)')
.each(function(){
$(this).replaceWith( this.childNodes );
});
return this;
};
سيكون استخدامك:
$(".featured p > *").unwrap();
$(".featured p").remove();
هذا يعمل عن طريق تغيير كل <p>
ل <span>
. يفعل ذلك في مكانه ، لذلك <p>
لا يجب أن تكون في النهاية (لا يوجد إلحاق - لن يعيد ترتيب العناصر):
$(".featured p").replaceWith(function(){
return $('<span />').html( $(this).html() );
});
إنه يستخدم HTML ، لذلك سيفقد العنصر البيانات وروابط الأحداث.
مع jQuery 1.4 يمكنك أن تفعل ذلك مثل هذا:
$(".featured p *").unwrap();
$(".featured p").each(function(){
$(this).replaceWith("<span>"+ $(this).text() + "</span>")
});
قم بتجريبه هنا
لا تحصل العقد النصية على فتحة ، لذلك عليك القيام بها بشكل منفصل. لست متأكدًا من السبب في أن Replacewith يتطلب منهم أن يكونوا داخل العلامات.
شيء من هذا القبيل؟
$(".featured p").each(
function(){
$(this).after($(this).html()).remove();
});
تحرير 2: اختبار ، أعمال. جميل وبسيط.
لا تنتمي إلى StackOverflow