Динамическое размещение всплывающей подсказки
Я использую подсказку Bootstrap через селектор атрибутов. т.е. любой элемент имеет title
атрибут должен отображаться как подсказка:
$('[title]').tooltip({placement: 'bottom', trigger: 'hover'});
Однако по некоторым причинам и по некоторым элементам я хотел бы изменить размещение. Первоначально я не использовал data-placement
атрибут для элементов, но для элементов, которые я хочу, чтобы его всплывающая подсказка имела другое расположение, отличное от значения по умолчанию, я поставил их с data-placement
атрибут, и я изменил приведенный выше код, чтобы быть похожим на следующее:
$('[title]').tooltip({placement: (typeof $(this).attr('data-placement') === 'undefined')? 'bottom' : $(this).attr('data-placement'), trigger: 'hover'});
Этот код должен установить место размещения bottom
для элементов, которые не имеют data-placement
атрибут, в то время как установлен, он равен его значению для элементов, которые имеют этот атрибут.
Тем не менее, код не работает должным образом, он устанавливает размещение = дно для каждого элемента, даже если он имеет data-placement='right
2 ответа
placement
Функция обратного вызова получает 2 аргумента - первый является аргументом всплывающей подсказки, а второй - исходным элементом.
Вы можете использовать этот элемент, чтобы получить данные, которые вы ищете:
$('[title]').tooltip({
placement: function(t_el, el) {
return (typeof $(el).data('placement') === 'undefined') ? 'bottom' : $(el).data('placement');
}, trigger: 'hover'
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<div style="margin: 35px 55px;">
<button type="button" class="btn btn-default" data-placement="left" title="Tooltip on left">Tooltip on left</button>
<button type="button" class="btn btn-default" data-placement="top" title="Tooltip on top">Tooltip on top</button>
<button type="button" class="btn btn-default" data-placement="bottom" title="Tooltip on bottom">Tooltip on bottom</button>
<button type="button" class="btn btn-default" data-placement="right" title="Tooltip on right">Tooltip on right</button>
</div>
Я считаю, что это потому, что $(this)
не ссылается на всплывающую подсказку, а скорее на ваш родительский селектор, скорее всего document
,
Попробуй это:
$('[title]').each(function() {
$(this).tooltip({
placement: (typeof $(this).attr('data-placement') === 'undefined') ? 'bottom' : $(this).attr('data-placement'),
trigger: 'hover'
});
});