为什么我的jquery代码无法在列表项中找到按钮?

时间:2014-01-19 07:17:57

标签: jquery

我有这个HTML。我试图显示给定李的隐藏取消按钮。 但不确定为什么我的代码不起作用。 我找到了正确的li元素,但我无法在所选的li项目中显示隐藏的取消按钮。

这是我的想法:

var $li = $('.qq-upload-list li.qq-upload-fail').eq(id); //I pass 0 based index correctly
if ($li != null && $li != undefined) {
   $li.find('.qq-upload-cancel').show();                            
}

HTML:

<ul class="qq-upload-list">
<li class=" qq-upload-fail">
<div class="qq-progress-bar" style="display: none; width: 100%;"></div>
<span class="qq-upload-spinner" style="display: none;"></span>
<span class="qq-upload-finished"></span>
<a class="qq-upload-cancel" href="#" style="display: none;">Cancel</a>
<a class="qq-upload-retry" href="#">Retry</a>
<a class="qq-upload-delete" href="#">Delete</a>
<span class="qq-upload-status-text">Upload failed</span>
</li>
<li class=" qq-upload-fail">..</li>
</ul>

更新 我发现了这个问题。上面的html是由代码动态生成的。但是在我处理事件之后,代码就会出现问题。一旦我将代码移动到正确的事件处理程序,所有看起来都很好。

3 个答案:

答案 0 :(得分:1)

jQuery eq()基于零,您可能希望使用eq(0)代替eq(1)

请注意 jQuery对象始终是!= null&amp;&amp; != undefined,您可能需要检查那里的长度。与if($li && $li.length){

一样

尝试:

var $li = $('.qq-upload-list li.qq-upload-fail').eq(0);

选项,使用:first

var $li = $('.qq-upload-list li.qq-upload-fail:first');

答案 1 :(得分:1)

由于eq()0-based索引,您需要更改:

var $li = $('.qq-upload-list li.qq-upload-fail').eq(1);

为:

var $li = $('.qq-upload-list li.qq-upload-fail').eq(0);

Demo

答案 2 :(得分:1)

你试过这个吗,

$('.qq-upload-list li.qq-upload-fail').find('.qq-upload-cancel').show();

要显示第三个取消按钮,

 var $li = $('.qq-upload-list > li.qq-upload-fail').eq( 2 ); //I pass 0 based index correctly
 $li.children('a.qq-upload-cancel').show();  

演示: http://jsfiddle.net/7xz7Y/