sweet-alert отображение HTML-кода в тексте

Я использую плагин sweet-alert Для отображения предупреждения. С классической конфигурацией (по умолчанию) все идет хорошо. Но когда я хочу добавить HTML-тег в текст, он отображает <b>...</b> не делая его жирным. После поиска ответа, Похоже, у меня нет правильного слова поиска...

Как заставить sweet alert отображать текст также с HTML-кодом?

var hh = "<b>test</b>";
swal({
    title: "" + txt + "", 
    text: "Testno  sporocilo za objekt " + hh + "",  
    confirmButtonText: "V redu", 
    allowOutsideClick: "true" 
});

7 ответов


РЕПО SweetAlert, похоже, не поддерживается. Есть куча запросов Pull без каких-либо ответов, последний объединенный запрос pull был 9 ноября 2014 года.

Я создал SweetAlert2 С поддержкой HTML в модальном и некоторых других опций для настройки модальной ширины окна, заполнения, поведения кнопки Esc и т. д.

swal({
  title: "<i>Title</i>", 
  html: "Testno  sporocilo za objekt: <b>test</b>",  
  confirmButtonText: "V <u>redu</u>", 
});
<script src="https://unpkg.com/sweetalert2@7.17.0/dist/sweetalert2.all.js"></script>

функция, позволяющая HTML для параметров заголовка и текста, была добавлена с недавним слиянием в главную ветвь на GitHub https://github.com/t4t5/sweetalert/commit/9c3bcc5cb75e598d6faaa37353ecd84937770f3d

просто используйте конфигурацию JSON и установите "html" в true, например:

swal({ html:true, title:'<i>TITLE</i>', text:'<b>TEXT</b>'});

Это было объединено менее недели назад и намекается в README.md (html имеет значение false в одном из примеров, хотя явно не описано), однако это еще не задокументировано на странице маркетингаhttp://tristanedwards.me/sweetalert


Я обновлялся со старого sweetalert и узнал, как это сделать в новой версии (officail Docs):

// this is a Node object    
var span = document.createElement("span");
span.innerHTML = "Testno  sporocilo za objekt <b>test</b>";

swal({
    title: "" + txt + "", 
    content: span,
    confirmButtonText: "V redu", 
    allowOutsideClick: "true" 
});

по состоянию на 2018 год принятый ответ устарел:

Sweetalert поддерживается, и вы можете решить проблему исходного вопроса с использованием контент.


Я просто боролся с этим. Я обновился от sweetalert 1 - > 2. Эта библиотека:https://sweetalert.js.org/guides/

пример из документации "string" не работает, как я ожидал. Ты просто не можешь так говорить.

content: `my es6 string <strong>template</strong>` 

Как я решил это:

const template = (`my es6 string <strong'>${variable}</strong>`);
content: {
      element: 'p',
      attributes: {
        innerHTML: `${template}`,
      },
    }

нет документации как это сделать, это был чистый метод проб и ошибок, но по крайней мере, кажется, работает.


Я просто применил патч, и он начинает работать.

diff --git a/sweet-alert.js b/sweet-alert.js
index ab6e1f1..d7eafaa 100755
--- a/sweet-alert.js
+++ b/sweet-alert.js
@@ -200,7 +200,8 @@
       confirmButtonColor: '#AEDEF4',
       cancelButtonText: 'Cancel',
       imageUrl: null,
-      imageSize: null
+      imageSize: null,
+      html: false
     };
 
     if (arguments[0] === undefined) {
@@ -224,6 +225,7 @@
           return false;
         }
 
+        params.html               = arguments[0].html;
         params.title              = arguments[0].title;
         params.text               = arguments[0].text || params.text;
         params.type               = arguments[0].type || params.type;
@@ -477,11 +479,18 @@
         $cancelBtn = modal.querySelector('button.cancel'),
         $confirmBtn = modal.querySelector('button.confirm');
 
+      console.log(params.html);
     // Title
-    $title.innerHTML = escapeHtml(params.title).split("\n").join("<br>");
+    if(params.html)
+      $title.innerHTML = params.title.split("\n").join("<br>");
+    else
+      $title.innerHTML = escapeHtml(params.title).split("\n").join("<br>");
 
     // Text
-    $text.innerHTML = escapeHtml(params.text || '').split("\n").join("<br>");
+    if(params.html)
+      $text.innerHTML = params.text.split("\n").join("<br>");
+    else
+      $text.innerHTML = escapeHtml(params.text || '').split("\n").join("<br>");
     if (params.text) {
       show($text);
     }

Я предполагаю, что </ не принимается внутри строки.

попробуйте избежать прямой косой черты "/", предшествуя ей обратной косой чертой"\", например:

var hh = "<b>test<\/b>";