使用JS访问HTML对象内的对象

时间:2011-10-21 20:46:14

标签: javascript jquery dom

我在播放器表div中创建了一个div标签数组。我正在使用class .players获取所有div标签。带有类名称的div。播放器中有输入fieds和一个链接字段。我希望能够操纵这些(删除,添加类等...)

我认为可行的是:

$(divarray[j]+' .link').hide();
$(divarray[j]+' a').remove('.link');

但它不起作用。有什么想法吗?我确信它很简单,但这是我第一次来到JS:)

var divarray = $('#player-table > .players');
        for( var j = 0; j < 10; j++){
        $(divarray[j]).removeClass("players");
        $(divarray[j]).addClass("selected_players");
        $('#debug').append(divarray[j]);
        $(divarray[j]+' a').hide();
    }

2 个答案:

答案 0 :(得分:3)

首先,您不能只使用字符串连接jQuery对象或DOM节点来创建新的选择器。 jQuery为这种情况提供了方法,你已经拥有了一个对象或DOM节点,并希望找到其他相关的节点。

其次,使用jQuery有更好的方法来处理一组元素。这是你的代码更像jQuery的方式。这只是一个例子,因为我不知道HTML结构。您必须对其进行调整,以便选择并应用于正确的元素。

$('#player-table > .players').slice(0,10) // gets the first 10 elements
 .removeClass("players")                  // removes the class from all of them
 .addClass("selected_players")            // adds the class
 .find('a').hide().end()                  // finds all descendant links and hides them
 .appendTo('#debug');                     // appends all elements to `#debug`

正如您所看到的,最后一行只有一个分号。这意味着整个代码块只是一个语句,但将其分成几行会增加可读性。

它的工作原因是fluent interface,这是jQuery大量使用的概念。它可以让你避免一遍又一遍地创建jQuery对象,就像你做的那样($(divarray[j]))。

另一个优点是,您可以同时处理整个元素集,而不必像使用“普通”DOM操作方法那样显式迭代每个元素。

为了学习JavaScript,我推荐MDN JavaScript Guide jQuery有几个tutorials和一个非常好的API documentation

彻底阅读它们以了解基础知识。如果不先阅读说明,就不能指望使用工具。

答案 1 :(得分:1)

试试这个结构

$(divarray[j]).find('.link').hide();
$(divarray[j]).find('a').remove('.link');

尝试

$(divarray[j]).find('.link:first').hide();  

如果您只需要处理第一个元素

希望有所帮助