使用正确的选择器定位 div
Targeting a div with the right selector
我的 HTML:
<tr class="main">
<td class="dropdown">
<a href="#">
<div class="dropdown-image"></div>
</a>
</td>
<td class="from">from</td>
<td class="subject">subject</td>
<td class="received">received</td>
<td class="status">Quarantined</td>
<td class="action">
<a href="#">
<div class="dropdown-menu"></div>
</a>
</td>
</tr>
我正在尝试定位 .dropdown-menu
,以便在 .dropdown-image
被点击后更改其背景图片。
我的 JavaScript:
$(function) {
$('.dropdown-image').click(function() {
var clicks = $(this).data('clicks');
var td = $(this).parent().parent();
var tr = $(this).parent().parent().parent();
if (clicks) {
td.closest('.action').child().child().css("background-image", "url(images/new-arrow.png)");
} else {
td.closest('.action').child().child().css("background-image", "url(images/new-arrow-blue.png)");
}
$(this).data("clicks", !clicks);
});
});
但是,这不起作用。我怎样才能正确定位 .dropdown-menu
?
您似乎在尝试使用 .closest()
方法来查找同级 '.action'
元素,但这不是 .closest()
所做的。如 the doco 中所述,它会查找匹配的祖先元素。这样就可以得到被点击的 div 所属的 tr 元素:
var tr = $(this).closest("tr");
然后您可以使用 .find()
method 找到属于该 tr 的下拉菜单 div - 这与 .closest()
相反,因为它会查找后代:
tr.find(".dropdown-menu")
换句话说,要找到相关的 .dropdown-menu
,请使用 .closest()
向上导航到 tr,然后使用 .find()
向下导航到相关的 div。
$(function() {
$('.dropdown-image').click(function() {
var $this = $(this),
clicks = $this.data('clicks'),
$relatedDiv = $this.closest("tr").find(".dropdown-menu");
if (clicks) {
$relatedDiv.css("background-image", "url(images/new-arrow.png)");
} else {
$relatedDiv.css("background-image", "url(images/new-arrow-blue.png)");
}
$this.data("clicks", !clicks);
});
});
注意我只调用$(this)
一次,把结果放在一个变量中。这样效率更高。
此外,正如评论中指出的那样,您有两个语法错误:
- 第一行应该是
$(function() {
(你的括号不正确)
- 倒数第三行逗号前少了一个
"
。
JS
$(function () {
$('.dropdown-image').click(function () {
var $relatedDiv = $(this).parents('tr.main').find('.dropdown-menu');
$relatedDiv.toggleClass('bg-image-new-arrow-blue');
$relatedDiv.toggleClass('bg-image-new-arrow');
});
});
css
.bg-image-new-arrow{
color: red;
font-size: 12px;
background: url(images/new-arrow.png) no-repeat;
}
.bg-image-new-arrow-blue{
color: blue;
font-size: 23px;
background: url(images/new-arrow-blue.png) no-repeat;
}
html
<table>
<tr class="main">
<td class="dropdown">
<a href="#">
<div class="dropdown-image">asasdasdd</div>
</a>
</td>
<td class="from">from</td>
<td class="subject">subject</td>
<td class="received">received</td>
<td class="status">Quarantined</td>
<td class="action">
<a href="#">
<div class="dropdown-menu bg-image-new-arrow-blue">DropDown menu</div>
</a>
</td>
</tr>
</table>
相关代码笔在this link
我的 HTML:
<tr class="main">
<td class="dropdown">
<a href="#">
<div class="dropdown-image"></div>
</a>
</td>
<td class="from">from</td>
<td class="subject">subject</td>
<td class="received">received</td>
<td class="status">Quarantined</td>
<td class="action">
<a href="#">
<div class="dropdown-menu"></div>
</a>
</td>
</tr>
我正在尝试定位 .dropdown-menu
,以便在 .dropdown-image
被点击后更改其背景图片。
我的 JavaScript:
$(function) {
$('.dropdown-image').click(function() {
var clicks = $(this).data('clicks');
var td = $(this).parent().parent();
var tr = $(this).parent().parent().parent();
if (clicks) {
td.closest('.action').child().child().css("background-image", "url(images/new-arrow.png)");
} else {
td.closest('.action').child().child().css("background-image", "url(images/new-arrow-blue.png)");
}
$(this).data("clicks", !clicks);
});
});
但是,这不起作用。我怎样才能正确定位 .dropdown-menu
?
您似乎在尝试使用 .closest()
方法来查找同级 '.action'
元素,但这不是 .closest()
所做的。如 the doco 中所述,它会查找匹配的祖先元素。这样就可以得到被点击的 div 所属的 tr 元素:
var tr = $(this).closest("tr");
然后您可以使用 .find()
method 找到属于该 tr 的下拉菜单 div - 这与 .closest()
相反,因为它会查找后代:
tr.find(".dropdown-menu")
换句话说,要找到相关的 .dropdown-menu
,请使用 .closest()
向上导航到 tr,然后使用 .find()
向下导航到相关的 div。
$(function() {
$('.dropdown-image').click(function() {
var $this = $(this),
clicks = $this.data('clicks'),
$relatedDiv = $this.closest("tr").find(".dropdown-menu");
if (clicks) {
$relatedDiv.css("background-image", "url(images/new-arrow.png)");
} else {
$relatedDiv.css("background-image", "url(images/new-arrow-blue.png)");
}
$this.data("clicks", !clicks);
});
});
注意我只调用$(this)
一次,把结果放在一个变量中。这样效率更高。
此外,正如评论中指出的那样,您有两个语法错误:
- 第一行应该是
$(function() {
(你的括号不正确) - 倒数第三行逗号前少了一个
"
。
JS
$(function () {
$('.dropdown-image').click(function () {
var $relatedDiv = $(this).parents('tr.main').find('.dropdown-menu');
$relatedDiv.toggleClass('bg-image-new-arrow-blue');
$relatedDiv.toggleClass('bg-image-new-arrow');
});
});
css
.bg-image-new-arrow{
color: red;
font-size: 12px;
background: url(images/new-arrow.png) no-repeat;
}
.bg-image-new-arrow-blue{
color: blue;
font-size: 23px;
background: url(images/new-arrow-blue.png) no-repeat;
}
html
<table>
<tr class="main">
<td class="dropdown">
<a href="#">
<div class="dropdown-image">asasdasdd</div>
</a>
</td>
<td class="from">from</td>
<td class="subject">subject</td>
<td class="received">received</td>
<td class="status">Quarantined</td>
<td class="action">
<a href="#">
<div class="dropdown-menu bg-image-new-arrow-blue">DropDown menu</div>
</a>
</td>
</tr>
</table>
相关代码笔在this link