Jquery 如何从li元素获取id?
我尝试使用jquery将.live()li元素的值作为以下代码:Jquery 如何从li元素获取id?,jquery,Jquery,我尝试使用jquery将.live()li元素的值作为以下代码: $("body").on("click", "#nav li:has(ul)", function (event) { if (this == event.target) { $(this).toggleClass('clicked').children('ul').slideToggle(); $(this).find('li:has(ul)').removeClass('clicked').fin
$("body").on("click", "#nav li:has(ul)", function (event) {
if (this == event.target) {
$(this).toggleClass('clicked').children('ul').slideToggle();
$(this).find('li:has(ul)').removeClass('clicked').find("ul").slideUp();
$(this).siblings().removeClass('clicked').find("ul").slideUp();
}
})
$("#content").load("content.html");
在content.html
中,我放置了如下代码:
<ul id="nav">
<li value='2012'>2012
<ul>
<li value='Geography'>Geography</li>
<li value='Topography'>Topography</li>
<li value='Geological'>Geological</li>
<li value='Seismology'>Seismology</li>
<li value='Volcanology'>Volcanology</li>
<li value='Oceanography'>Oceanography</li>
<li value='Hydrogeology'>Hydrogeology</li>
<li value='Meteorology'>Meteorology</li>
<li value='Demography'>Demography</li>
</ul>
</li>
</ul>
因此,当我单击li元素时,alert($('li').attr('value')
,
如何获取其值?您应该使用
.val()
返回值,使用.html()
返回html。在事件侦听器中,向事件侦听器添加额外的else
条件
除非阻止,否则事件将始终在点击#nav li:has(ul)
元素(其后代)时触发。检查事件。目标元素是否指向
$("body").on("click", "#nav li:has(ul)", function (event) {
var $target = $(event.target);
if (this == event.target) {
$target.toggleClass('clicked').children('ul').slideToggle()
$target.find('li:has(ul)').removeClass('clicked').find("ul").slideUp()
$target.siblings().removeClass('clicked').find("ul").slideUp();
} else if ($.nodeName(event.target, 'li')) {
// LI element, not the root li
var val = $target.attr('value');
}
});
此代码假定单击的
元素没有任何其他子体(即:纯文本)。如果有,则还必须遍历树
与其添加非标准的值
属性,我建议使用数据
-属性,例如:
<li data-value='Geological'>Geological</li>
不是答案,只是一种改进。与其多次执行$(此)
,不如执行var elem=$(此);
并多次使用elem
。li
元素中的值
属性已被弃用。我不知道。on
、.one
和。off
已弃用。live
、.bind
、和。delegate
。你动摇了我的世界。我尝试了你的代码,但它返回了error…重新运行值是0
@JinSun jQuery在值属性上似乎失败了。用数据值替换值解决了问题:它可以工作,但复制了值…当我点击2012
时,它是可以的。但是当我点击地理时,它会出现两个地理地理和所以on@JinSun正如我所说:将event.stopPropagation();
放在$(“body”)之后。在(“click”、“#nav li:has(ul)”上,函数(event){
@JinSun.find()
搜索所有子体。使用.children()
代替.find()
如果只想获取子元素,请添加:first
选择器,或在之后使用.first()
。find()
或.children()
仅获取第一个元素。
$target.attr('data-value'); // Or:
$target.data('value');