Как добавить опцию sanitize: false во всплывающее окно?

Я пытаюсь поместить кнопку внутри Popovers в Bootstrap. Но мне это не удалось.

Я использую Bootstrap-Popover. Я хочу иметь кнопку внутри поповера.

var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle = "popover"]'))
var popoverList = popoverTriggerList.map(function(popoverTriggerEl) {
  return new bootstrap.Popover(popoverTriggerEl)
});
popoverList.forEach(function (popover) {
   popover.getTipElement().getElementsByClassName('.servicePOP').innerHTML += '<button type = "button" class = "btn btn-primary">My Button</button>';  
   });
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<link href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel = "stylesheet" />
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "col-lg-4 mb-3 servicePOP" data-aos = "fade-up" tabindex = "0" data-bs-toggle = "popover" data-bs-placement = "top" data-bs-trigger = "focus" title = "Title" data-bs-content = "A short description">
  <div class = "card position-relative">
    <div class = "d-block card-icon">
      <img src = "images.png" class = "card-icon position-absolute start-0 end-0 m-auto rounded-circle mb-5 lazy" alt = "Title">
    </div>
    <div class = "card-body text-center mt-5 pt-5">
      <a href = "# class = " text-decoration-none text-dark ">
                <h5 class = "card-title ">Title</h5>
            </a>
            <p>A short description</p>
            <a href = "# " class = "btn btn-primary ">More Details</a>
        </div>
    </div>
</div>

Мой вопрос:

Как добавить опцию sanitize: false во всплывающее окно?

Вы пробовали sanitize: false или отказались от sanitizeFn?

morganney 25.12.2022 15:24

@morganney - Нет. Как мне это попробовать?

Mahmoud Khoravi 25.12.2022 15:53
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
4
2
110
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете установить sanitize: false в качестве опции, которую вы можете пройти, когда включите всплывающее окно. Вставка HTML во всплывающее окно также требует, чтобы для параметра html было установлено значение true (по умолчанию false).

Документация здесь.

const servicePOP = document.querySelector('.servicePOP')
const popover = new bootstrap.Popover(servicePOP, {
  sanitize: false,
  html: true,
  content: '<button type = "button" class = "btn btn-primary">My Button</button>'
})

Если у вас есть несколько всплывающих окон на странице, вы можете инициализировать все всплывающие окна, выбрав их по их атрибуту data-bs-toggle, например:

const popoverTriggerList = document.querySelectorAll('[data-bs-toggle = "popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl, options))

Затем мы можем передать нашу конфигурацию всплывающего окна в настройках и прикрепить функцию к опции content. Внутри этой функции мы можем получить доступ к триггерному элементу всплывающего окна и, в моем примере, получить от него атрибут data-pop-example (который я добавил в HTML) и вставить его во всплывающее окно content в качестве имени кнопки, например так:

const popoverTriggerList = document.querySelectorAll('[data-bs-toggle = "popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl,{
  sanitize: false,
  html: true,
  content: function() {
    const popExample = popoverTriggerEl.getAttribute('data-pop-example')
    return `<button type = "button" class = "btn btn-primary">${popExample}</button>`;
  }
}))
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<link href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel = "stylesheet" />
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div style = "height:125px"></div>
<div class = "col-lg-4 mb-3 servicePOP" data-aos = "fade-up" tabindex = "0" data-bs-toggle = "popover" data-bs-placement = "top" data-bs-trigger = "focus" title = "Title" data-pop-example = "Button 1">
  <div class = "card position-relative">
    <div class = "d-block card-icon">
      <img src = "images.png" class = "card-icon position-absolute start-0 end-0 m-auto rounded-circle mb-5 lazy" alt = "Title">
    </div>
    <div class = "card-body text-center mt-5 pt-5">
      <a href = "#" class = " text-decoration-none text-dark ">
                <h5 class = "card-title ">Title</h5>
            </a>
            <p>A short description</p>
            <a href = "# " class = "btn btn-primary ">More Details</a>
        </div>
    </div>
</div>

<div class = "col-lg-4 mb-3 servicePOP" data-aos = "fade-up" tabindex = "0" data-bs-toggle = "popover" data-bs-placement = "top" data-bs-trigger = "focus" title = "Title 2" data-pop-example = "Button 2">
  <div class = "card position-relative">
    <div class = "d-block card-icon">
      <img src = "images.png" class = "card-icon position-absolute start-0 end-0 m-auto rounded-circle mb-5 lazy" alt = "Title">
    </div>
    <div class = "card-body text-center mt-5 pt-5">
      <a href = "#" class = " text-decoration-none text-dark ">
                <h5 class = "card-title ">Title</h5>
            </a>
            <p>A short description</p>
            <a href = "# " class = "btn btn-primary ">More Details</a>
        </div>
    </div>
</div>

Есть много вещей, которые вы можете сделать внутри функции, чтобы установить content, например, получить доступ к данным JSON, которые вы хотите вставить, пользовательские URL-адреса и т. д. Здесь нет предела.

Спасибо за ответ, Но у меня три карты i.stack.imgur.com/lmSgp.png. Это работает только в первую очередь. Не второй и не третий

Mahmoud Khoravi 25.12.2022 23:17

И как показать описание?

Mahmoud Khoravi 25.12.2022 23:24

@MahmoudKhoravi Смотрите мою правку. Просто выберите триггерные элементы всплывающего окна по идентификатору и дублирующему коду, предполагая, что вам нужен разный контент для каждого всплывающего окна. Код подходит для 3-х карт. На ваш второй вопрос; Я не знаю, что вы имеете в виду под описанием. Наконец, дополнительные вопросы, как правило, в порядке, но если вам нужны новые функции, попробуйте сначала их сами, а затем снова спросите SO, если вы застряли.

Cooleronie 25.12.2022 23:50

Может быть, менеджер хочет сделать еще сотню. Я хочу создать с помощью цикла for. Я не хочу вводить каждый код. Как это возможно?

Mahmoud Khoravi 26.12.2022 10:24

Спасибо за Ваш ответ. Но у меня есть вопрос. Как добавить такое описание? i.stack.imgur.com/uUo7Y.png

Mahmoud Khoravi 27.12.2022 00:17

Описание @MahmoudKhoravi = content в моем примере, приятель. Просто добавьте любой текст, который вы хотите, в оператор return в моем примере. И читайте документы, там вам все подскажут.

Cooleronie 27.12.2022 00:45

Другие вопросы по теме