我有以下列表:
<div id="saved">
<ul class="list-group" style="display: block;">
<li class="marked list-group-item">box-shadow:<span class="marked_text">0px 0px rgb(200,200,200)</span>;<a class="pull-right multiple-shadows checkbox-active">Click</a>
</li>
</ul>
</div>
现在我想存储变量内部的文本。
我写了以下代码:
$("body").on("click", "#saved ul li > a.multiple-shadows", function () {
$(this).toggleClass("checkbox-active");
var roll = $(this).closest("span").text();
console.log(roll);
});
问题是,使用.text()我得到一个空值并且.html()我得到undefined.Any ideas?
答案 0 :(得分:4)
$.closest()
获取父级(https://api.jquery.com/closest/)。你需要的是$(this).siblings("span")
。还尝试限制jQuery中的选择器数量。 $('a.multiple-shadows')
绰绰有余。
编辑:如果您有多个跨栏兄弟,要获得第一个,请使用$(this).siblings("span").first()
答案 1 :(得分:2)
closest
找到元素的最近祖先。 span
是您a
代码的兄弟,因此closest
返回undefined
是正确的。你的a位于li
内,ul
位于div
内,因此这些是closest
将返回任何内容的唯一元素
答案 2 :(得分:1)
由于您的范围位于a
标记之前,因此您可以使用.prev()
函数。
$(this).toggleClass("checkbox-active");
var roll = $(this).prev().text();
console.log(roll);
答案 3 :(得分:1)
.closest
&#34;通过测试元素本身并遍历DOM树中的祖先来匹配选择器&#34; (https://api.jquery.com/closest/)。因此,.closest
不会匹配任何兄弟姐妹,而是祖先。相反,您可以使用.prev()
。
$("#saved").on("click", ".multiple-shadows",function(){
$(this).toggleClass("checkbox-active");
var roll=$(this).prev().text();
alert(roll);
});