سؤال

لغة البرمجة:

<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: اختبار ، أعمال. جميل وبسيط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top