我遇到了使用Javascript获取准确值的问题。
以下是我们在单项上课时的工作版本。 http://jsfiddle.net/rtnNd/
实际上,当代码块中有更多具有相同类的项目时(请参阅:http://jsfiddle.net/rtnNd/3),它只选取使用类名的第一个项目。
我的问题是我只想选择使用类名的最后一项。所以我使用了以下代码:
var item = $('.itemAnchor')[6];
var href = $($('.hidden_elem')[1].innerHTML.replace('<!--', '').replace('-->', '')).find(item).attr('href');
但它不起作用。我真的不知道为什么。
可能包含项目的代码使用相同的类,类可以在2个项目,3个项目或第6次使用。这就是为什么,我想只拿起要提取的最后一项。
你能解释一下,谢谢大家阅读我的问题。
答案 0 :(得分:2)
“我的问题是我只想选择使用类名的最后一项。”
好的,所以在一般意义上你会使用.last()
方法:
var lastItem = $('.itemAnchor').last();
除了DOM中没有该类的元素,因为(在你的小提琴中)它们都被注释掉了。这也是您在问题中显示的代码不起作用的原因。第一行:
var item = $('.itemAnchor')[6];
...将item
变量设置为undefined
。选择器'.itemAnchor'
不返回任何元素,因此$('.itemAnchor')
是一个空的jQuery对象,它在索引6
没有元素。
在删除使用'.itemAnchor'
语句的开始和结束评论之后,您需要使用上的.replace()
选择器,所以:
var href = $($('.hidden_elem')[0].innerHTML.replace('<!--','').replace('-->',''))
.find('.itemAnchor').last().attr('href');
演示:http://jsfiddle.net/rtnNd/4/
编辑回复评论:
“我们怎样才能在最后一个之前拿起itemElement。”
如果您知道总是希望倒数第二项使用.slice(-2,-1)
而不是.last()
,则如下所示:http://jsfiddle.net/rtnNd/5/
或者,如果您知道自己想要一个href
包含参数h=
的人,那么您可以使用'.itemAnchor[href*="h="]'
和.find()
之类的选择器,在这种情况下,您可以不需要.last()
或.slice()
:
var href = $($('.hidden_elem')[0].innerHTML.replace('<!--','').replace('-->',''))
.find('.itemAnchor[href*="h="]').attr('href');
演示:http://jsfiddle.net/rtnNd/6/
请注意,使用attribute-contains selector的最后一种方法是拾取href
在任何地方都有文字“h =” 的元素,因此它适用于您的情况但也可以选择hh=something
或math=easy
或其他任何内容。你可以避免这种情况,只测试h=
如下:
var href = $($('.hidden_elem')[0].innerHTML.replace('<!--','').replace('-->',''))
.find('.itemAnchor')
.filter(function() {
return /(\?|&)h=/.test(this.href);
}).attr('href');