Html-react-parser: يجب استبعاد خيار القطع

تم إنشاؤها على ٥ يناير ٢٠٢١  ·  4تعليقات  ·  مصدر: remarkablemark/html-react-parser

شكرا لك على المشروع. هل من الممكن أن يتجاهل الخيار trim: true كل شيء بداخل عناصر <pre> نظرًا لطبيعة هذا العنصر للحفاظ على المسافة البيضاء؟ هل تقوم بدمج العلاقات العامة التي تقوم بذلك؟

question

ال 4 كومينتر

شكرا على فكرةdanielimmke!

لسوء الحظ ، ليس من السهل الاحتفاظ بالمسافة البيضاء داخل عنصر <pre> . السبب هو أن <pre> يسمح بصياغة المحتوى ، مما يعقد عملية التنفيذ.

على سبيل المثال ، كيف يمكننا التعامل مع ما يلي؟

const parse = require('html-react-parser');

parse(`
  <pre>
    hello <em>world <span>!</span> </em>
  </pre>
`, { trim: true });

سيقوم محلل html-dom-parser بتحليل كل عنصر ( <pre> ، <em> ، <span> ):

const { htmlToDOM } = require('html-react-parser');

htmlToDOM(`
  <pre>
    hello <em>world <span>!</span> </em>
  </pre>
`);

انظر عرض Repl.it.

شكرًا على الرد السريع - ربما تكون هناك طريقة عامة أفضل للتعامل مع هذا الأمر بعد ذلك. ما زلت بحاجة إلى إجراء trim: true لمعظم المحتوى الخاص بي ، ولكن ربما يمكنني إضافة خيار لجعل المحلل يتجاهل الجزء الداخلي من عنصر معين (يمكن أن يجتاز المحدد) ولا يحاول تحليل / تغيير أي شيء بداخله . لست متأكدًا مما إذا كان هذا ممكنًا حاليًا مع الخيارات المتاحة.

أنا أستخدم هذا داخل مشروع Gatsby ويتم استخدام <pre> بشكل أساسي لتنسيق الكود ، لذا فإن تحليله ليس مثاليًا بالتأكيد. إنها حالة متطرفة ولكن يمكنني رؤية الكثير من الأشخاص الآخرين يركضون إليها أيضًا.

في الواقع هناك طريقة لتعطيل trim لعناصر <pre> باستخدام خيار الاستبدال :

import parse, { domToReact } from 'html-react-parser';

const html = `
  <pre>
    <span>Whitespace is
      <strong>preserved</strong>!
    </span>
  </pre>
`;

const options = {
  replace: ({ name, children }) => {
    if (name === 'pre') {
      return domToReact(children, options);
    }
  },
};

parse(html, { ...options, trim: true });

انظر عرض CodeSandbox .

شكرا ، سأحاول ذلك بدلا من ذلك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات