تقليم الرائدة/زائدة بيضاء من ناحية النص باستخدام jQuery ؟

StackOverflow https://stackoverflow.com/questions/3721999

سؤال

التعليمات البرمجية التالية مثال على نص وضعها في ناحية النص من قاعدة البيانات.

<textarea id="inputPane" cols="80" rows="40" class="pane">
<p>
    some text here...
</p>
  <p>
    more text here...
</p>
</textarea>

باستخدام مسج هو .تقليم ما هو الفعلي رمز مسج لإزالة جميع البائعين الرائدة زائدة بيضاء ولها textarea عرض مشابهة جدا إلى أدناه ؟

<textarea id="inputPane" cols="80" rows="40" class="pane">
    <p>some text here...</p>
    <p>more text here...</p>
</textarea>

لقد عملت على هذا لمدة ساعة مع أي نجاح محاولة تركيبات مختلفة مع .تقليم

$('#inputPane')jQuery.trim(string);
هل كانت مفيدة؟

المحلول

قد تتمكن من محاولة شيء من هذا القبيل:

jQuery(function(​$) {
    var pane = $('#inputPane');
    pane.val($.trim(pane.val()).replace(/\s*[\r\n]+\s*/g, '\n')
                               .replace(/(<[^\/][^>]*>)\s*/g, '$1')
                               .replace(/\s*(<\/[^>]+>)/g, '$1'));
});​

الذي يعطي النتيجة:

<p>some text here...</p>
<p>more text here...</p>

على الرغم من أن هذا قد لا يكون الرصاص ، ينبغي أن تكون أسرع بكثير/أكثر كفاءة من خلق من عناصر HTML قيمة من ناحية النص.

نصائح أخرى

جرب هذا:

var $input = $('#inputPane');

var $container = $('<div>').html( $input.val() );

$('*', $container).text( function(i,txt) {
    return $.trim( txt );
});

$input.val( $container.html() );

يحول محتوى textarea في عناصر ، يسير من خلالها ويحخر من المحتوى ، ثم إدراج HTML الناتج مرة أخرى في textarea.


تعديل: تعديل للاستخدام .val() بدلاً من .text() كما لاحظ bobince

jQuery.trim() سيقوم بإزالة المسافة البيضاء الرائدة والخليفة من السلسلة بأكملها - في هذه الحالة ، قبل الأول <p> وبعد آخرها </p>. تريد شيئًا أكثر تعقيدًا ، وهو إزالة المسافة البيضاء بين بعض العلامات. هذا ليس بالأمر السهل بالضرورة ، ولكن يمكن (ربما!) تحقيق تعبير منتظم ، على سبيل المثال:

// assuming val is the textarea contents:
val = val.replace(/>\s*</, '><').replace(/\s+$/, '');

تنصل: تم وضع هذا بسرعة معًا وقد لا يغطي كل حالة.

احصل على القيمة ، وقم بتقطيع القيمة ، وضبط القيمة:

var value = $('#inputPane').val();
value = $.trim(value);
$('#inputPane').val(value);

أو في سطر واحد:

$('#inputPane').val($.trim($('#inputPane').val()));

هكذا سأفعل ذلك (العرض التوضيحي):

$('.pane').val(function(i,v){
    return v.replace(/\s+/g,' ').replace(/>(\s)</g,'>\n<');
});

لا تحتاج إلى jQuery لتقليص المسافة البيضاء الرائدة/الفوقية من Textarea. تحتاج إلى ترميزه في سطر واحد

قبل:

<textarea id="inputPane" cols="80" rows="40" class="pane">
    <p>some text here...</p>
    <p>more text here...</p>
</textarea>

بعد، بعدما:

<textarea id="inputPane" cols="80" rows="40" class="pane"><p>some text here...</p></textarea>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top