当第一个元素被选中时,工具提示不显示第一个元素的左边

Tooltip not showing left of first element when first element selected

本文关键字:元素 第一个 显示 左边 工具提示      更新时间:2023-09-26

在我的代码中是一个到目前为止我得到的例子。我使用$('.recommended_slot:first')来查找要附加工具提示的元素,但是当它被附加时,它显示在第一个推荐槽的下一个元素旁边。

如果有人有任何建议,如何做得更好,或者为什么它搞砸了。那我很想听听你的建议。谢谢:)

JSFIDDLE例子

$(document).ready(function(){
	addPopOverEvery(2, '.slot:not(.alreadyBooked)');
  	findBestRecommendedSlot();
});
function addPopOverEvery(n, selector) {
	$(selector).each(function() {
		var $original = $(this),
		$self = $(this),
		$is_pop = true,
		i = 0;
		if ($original.prev().is(selector)) {
			for (i = 1; i < n; i++) {
				$self = $self.prev();
				if (!$self.is(selector) || $self.find('.popOver').length) {
					$is_pop = false;
					break;
				}
			}
		}
		if ($is_pop) {
			$self = $original;
			for (i = 1; i < n; i++) {
				$self = $self.next();
				if (!$self.is(selector)) {
					$is_pop = false;
					break;
				}
			}
		}
		if ($is_pop) {
			$original.addClass("recommended_slot");
			$original.css("color", "red");
		}
	});
}
function findBestRecommendedSlot(){
  $('.recommended_slot:first').text('recommended');
  $('.recommended_slot:first').append('<span class="tooltiptext">This slot is recommended</span>');
  
  
}
.popOver{
   width:400px;
   height: 30px;
   background: green;
   position: absolute;
   z-index: 999;
   margin-left: 120px;
   opacity: 0.5;
   color: white!important;
}
.tooltiptext {
	width: 120px;
    background-color: black;
    color: #fff;
    text-align: center;
    border-radius: 6px;
    padding: 5px 0;
    margin-right: 330px;
    z-index: 1;
    display: inline-block;
    float: right;
    margin-top: 5px;
    margin-bottom: -5px;
}
.tooltiptext::after {
    content: "";
    position: absolute;
    margin-left: -112px;
    margin-top: -5px;
    border-width: 5px;
    border-style: solid;
    border-color: transparent black transparent transparent;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
  <li class="slot">15:10 18/08/2016</li>
  <li class="slot">15:15 18/08/2016</li>
  <li class="slot alreadyBooked">15:20 18/08/2016</li>
  <li class="slot alreadyBooked">15:25 18/08/2016</li>
  <li class="slot">15:30 18/08/2016</li>
  <li class="slot">15:35 18/08/2016</li>
</ul>

它实际上是正确的,只是你的CSS把它弄乱了。;)

$(document).ready(function(){
	addPopOverEvery(2, '.slot:not(.alreadyBooked)');
  	findBestRecommendedSlot();
});
function addPopOverEvery(n, selector) {
	$(selector).each(function() {
		var $original = $(this),
		$self = $(this),
		$is_pop = true,
		i = 0;
		if ($original.prev().is(selector)) {
			for (i = 1; i < n; i++) {
				$self = $self.prev();
				if (!$self.is(selector) || $self.find('.popOver').length) {
					$is_pop = false;
					break;
				}
			}
		}
		if ($is_pop) {
			$self = $original;
			for (i = 1; i < n; i++) {
				$self = $self.next();
				if (!$self.is(selector)) {
					$is_pop = false;
					break;
				}
			}
		}
		if ($is_pop) {
			$original.addClass("recommended_slot");
			$original.css("color", "red");
		}
	});
}
function findBestRecommendedSlot(){
  $('.recommended_slot:first').text('recommended');
  $('.recommended_slot:first').append('<span class="tooltiptext">This slot is recommended</span>');
  
  
}
.popOver{
   width:400px;
   height: 30px;
   background: green;
   position: absolute;
   z-index: 999;
   margin-left: 120px;
   opacity: 0.5;
   color: white!important;
}
.tooltiptext {
    width: 120px;
    background-color: black;
    color: #fff;
    text-align: center;
    vertical-align: middle;
    border-radius: 6px;
    padding: 5px 0;
    margin-left: 10px;
    z-index: 1;
    display: inline-block;
}
.tooltiptext::after {
    content: "";
    position: absolute;
    margin-left: -115px;
    margin-top: -5px;
    border-width: 5px;
    border-style: solid;
    border-color: transparent black transparent transparent;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
  <li class="slot">15:10 18/08/2016</li>
  <li class="slot">15:15 18/08/2016</li>
  <li class="slot alreadyBooked">15:20 18/08/2016</li>
  <li class="slot alreadyBooked">15:25 18/08/2016</li>
  <li class="slot">15:30 18/08/2016</li>
  <li class="slot">15:35 18/08/2016</li>
</ul>

这是特别给查理的!亲吻!

$(document).ready(function(){
	addPopOverEvery(2, '.slot:not(.alreadyBooked)');
  	findBestRecommendedSlot();
});
function addPopOverEvery(n, selector) {
	$(selector).each(function() {
		var $original = $(this),
		$self = $(this),
		$is_pop = true,
		i = 0;
		if ($original.prev().is(selector)) {
			for (i = 1; i < n; i++) {
				$self = $self.prev();
				if (!$self.is(selector) || $self.find('.popOver').length) {
					$is_pop = false;
					break;
				}
			}
		}
		if ($is_pop) {
			$self = $original;
			for (i = 1; i < n; i++) {
				$self = $self.next();
				if (!$self.is(selector)) {
					$is_pop = false;
					break;
				}
			}
		}
		if ($is_pop) {
			$original.addClass("recommended_slot");
			$original.css("color", "red");
		}
	});
}
function findBestRecommendedSlot(){
  $('.recommended_slot:first').text('recommended');
  $('.recommended_slot:first').append('<span class="tooltiptext">This slot is recommended</span>');
  
  
}
.popOver{
   width:400px;
   height: 30px;
   background: green;
   position: absolute;
   z-index: 999;
   margin-left: 120px;
   opacity: 0.5;
   color: white!important;
}
.tooltiptext {
    position: absolute;
    width: 120px;
    background-color: black;
    color: #fff;
    text-align: center;
    vertical-align: middle;
    border-radius: 6px;
    padding: 5px 0;
    margin-left: 10px;
    z-index: 1;
    display: inline-block;
    margin-top: -13px;
}
.tooltiptext::after {
    content: "";
    position: absolute;
    margin-left: -115px;
    margin-top: -5px;
    border-width: 5px;
    border-style: solid;
    border-color: transparent black transparent transparent;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
  <li class="slot">15:10 18/08/2016</li>
  <li class="slot">15:15 18/08/2016</li>
  <li class="slot alreadyBooked">15:20 18/08/2016</li>
  <li class="slot alreadyBooked">15:25 18/08/2016</li>
  <li class="slot">15:30 18/08/2016</li>
  <li class="slot">15:35 18/08/2016</li>
</ul>

还有一个想法

$(document).ready(function(){
	addPopOverEvery(2, '.slot:not(.alreadyBooked)');
  	findBestRecommendedSlot();
});
function addPopOverEvery(n, selector) {
	$(selector).each(function() {
		var $original = $(this),
		$self = $(this),
		$is_pop = true,
		i = 0;
		if ($original.prev().is(selector)) {
			for (i = 1; i < n; i++) {
				$self = $self.prev();
				if (!$self.is(selector) || $self.find('.popOver').length) {
					$is_pop = false;
					break;
				}
			}
		}
		if ($is_pop) {
			$self = $original;
			for (i = 1; i < n; i++) {
				$self = $self.next();
				if (!$self.is(selector)) {
					$is_pop = false;
					break;
				}
			}
		}
		if ($is_pop) {
			$original.addClass("recommended_slot");
			$original.css("color", "red");
		}
	});
}
function findBestRecommendedSlot(){
  $('.recommended_slot:first').text('recommended');
  $('.recommended_slot:first').append('<span class="tooltiptext">This slot is recommended</span>');
  
  
}
.popOver{
   width:400px;
   height: 30px;
   background: green;
   position: absolute;
   z-index: 999;
   margin-left: 120px;
   opacity: 0.5;
   color: white!important;
}
.tooltiptext {
    width: 120px;
    background-color: black;
    color: #fff;
    text-align: center;
    vertical-align: middle;
    border-radius: 6px;
    padding: 5px 0;
    margin-left: 10px;
    z-index: 1;
    position: absolute;
    top: 2px;
}
.tooltiptext::after {
    content: "";
    position: absolute;
    margin-left: -115px;
    margin-top: -5px;
    border-width: 5px;
    border-style: solid;
    border-color: transparent black transparent transparent;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
  <li class="slot">15:10 18/08/2016</li>
  <li class="slot">15:15 18/08/2016</li>
  <li class="slot alreadyBooked">15:20 18/08/2016</li>
  <li class="slot alreadyBooked">15:25 18/08/2016</li>
  <li class="slot">15:30 18/08/2016</li>
  <li class="slot">15:35 18/08/2016</li>
</ul>