我已经在jquery selectors中搜索了一段时间,但找不到解决问题的方法。
我有一个由 foreach 提交的html表。在每一行上,弹出工具提示的几个链接。我的问题:找不到合适的选择器。
<table>
<?php foreach($article) :?>
<tr>
<td>
<div class="none" style="display:none;">
<div class="tooltip_1">
"The content of my tooltip_1"
</div>
<div class="tooltip_2">
"The content of my tooltip_2"
</div>
</div>
<div class="cell">
<a href="#" class="link_to_tooltip_1">a link</a>
<a href="#" class="link_to_tooltip_2">a link</a>
</div>
</td>
<tr>
<?php endforeach; ?>
</table>
要显示我的工具提示,我使用qTip,它的工作方式如下:
$('a[class="link_to_tooltip_1"]').qtip({
content: $('jquery selector'),
(... other options)
});
所以基本上,我需要像
这样的东西content: $('self.parentNode.parentNode > div[class="none"] > div[class="tooltip_1"]'),
换句话说,:
非常感谢。
答案 0 :(得分:2)
$('a.link_to_tooltip1').closest('tr').find('.tooltip_1');
你可能正在寻找什么?
答案 1 :(得分:2)
// this is "complex" version;
// assumes .cell and .none are nested inside same container, whether <td> or <li> or anything
$(".link_to_tooltip_1").each(function () {
console.log($(this).closest(".cell").siblings(".none").find(".tooltip_1"));
// $(this).qtip({ content: /* use above selector */ });
});
// this is the "not-so-complex" version;
// assumes both items are nested arbitrary level deep inside same <td>
$(".link_to_tooltip_1").each(function () {
console.log($(this).closest("td").find(".tooltip_1"));
// $(this).qtip({ content: /* use above selector */ });
});
答案 2 :(得分:1)
以下是您要查找的选择器:
"td:has(.cell .link_to_tooltip_1) .none .tooltip_1"
说明:
你不能倒退(匹配一个元素,然后匹配它的父元素)。但是,您可以选择一个元素verify that it contains elements that match an other selector:
"td:has(.cell .link_to_tooltip_1)"
这会选择<td>
的父.link_to_tooltip_1
。所以这完全符合您所描述的.link_to_tooltip_1.parentNode.parentNode
。
然后,您只需在所选的.none .tooltip_1
中选择<td>
:
"td:has(.cell .link_to_tooltip_1) .none .tooltip_1"
因此,您的示例代码变为:
$('a[class="link_to_tooltip_1"]').qtip({
content: $("td:has(.cell .link_to_tooltip_1) .none .tooltip_1"),
(... other options)
});
正如您所要求的那样,只需使用jquery选择器: - )
答案 3 :(得分:1)
为什么不放置这样的工具提示? :
<table>
<?php foreach($article) :?>
<tr>
<td>
<div class="cell">
<span class="tooltip_1" style="display:none;" >"The content of my tooltip_1"</span><a href="#" class="link_to_tooltip_1">a link</a>
<span class="tooltip_2" style="display:none;" >"The content of my tooltip_2"</span><a href="#" class="link_to_tooltip_2">a link</a>
</div>
</td>
<tr>
<?php endforeach; ?>
</table>
和
$('a[class="link_to_tooltip_1"]').qtip({
content: $(this).children("span"),
(... other options)
});
修改强> 我不知道你不能用$(这个)。所以在这种情况下,你可以这样做:
$('a[class="link_to_tooltip_1"]').each(function(){
var content = $(this).prev("span");
$(this).qtip({
content: content,
(... other options)
});
答案 4 :(得分:1)
我会尝试这样的事情:
使用工具提示和rel属性为元素添加一个类,其中包含元素保存数据的目标类
<a href="#" class="iHaveATooltip" rel="tooltip1">link with tooltip yar!</a>
然后在JS
$('a.iHaveATooltip').bind('mouseenter', function(){
$(this).addClass('showingTooltip');
}).bind('mouseleave', function(){
$(this).removeClass('showingTooltip');
}).qtip({
content: function(){ return $('.' + $('.showingTooltip').attr('rel')).html() },
(... other options)
});
这是我唯一可以用来欺骗缺乏对基于DOM结构的通用数据引用的支持的想法。虽然不能保证它会工作,因为我不知道插件,并且不知道传递函数作为参数是否会与它的实现方式发生冲突 - 你可能必须更改插件以允许它接受函数内容参数。
再见,祝你好运,汤姆