用jQuery随机化一系列div元素 [英] Randomize a sequence of div elements with jQuery
问题描述
我试图用jQuery来完成我的第一步,但是我很难理解如何从div父元素中找到子元素的列表。我习惯使用ActionScript 2和ActionScript 3,所以我可能会误解一些概念,比如用jQuery随机化一系列div元素的更好方法!
我有这个HTML代码的简单部分:
< div class =band>
< div class =member>
< ul>
< li>约翰< / li>
< li>列侬< / li>
< / ul>
< / div>
< div class =member>
< ul>
< li> Paul< / li>
< li> McCartney< / li>
< / ul>
< / div>
< div class =member>
< ul>
< li> George< / li>
< li>哈里森< / li>
< / ul>
< / div>
< div class =member>
< ul>
< li> Ringo< / li>
< li> Starr< / li>
< / ul>
< / div>
< / div>
我尝试了一些方法来执行map .member div
函数setArrayElements(element_parent){
var arr = [ ]。
// alert(element_parent [0] .innerHTML);
for(var i = 0; i< element_parent.children()。length; i ++){
arr.push(element_parent [i] .innerHTML);
}
}
setArrayElements($(.band));
当我尝试提醒 element_parent [0] 时,我以为得到我的 .member 列表的div的第一个孩子,但它不是。
如果我使用 element_parent [0] .innerHTML 我看到:
< div class =member>
< ul>
< li>约翰< / li>
< li>列侬< / li>
< / ul>
< / div>
< div class =member>
< ul>
< li> Paul< / li>
< li> McCartney< / li>
< / ul>
< / div>
< div class =member>
< ul>
< li> George< / li>
< li>哈里森< / li>
< / ul>
< / div>
< div class =member>
< ul>
< li> Ringo< / li>
< li> Starr< / li>
< / ul>
< / div>
为什么?
我该怎么做才能得到这样的一个成员?
< div class =member >
< ul>
< li> Paul< / li>
< li> McCartney< / li>
< / ul>
< / div>
我相信这应该很简单,但我不知道
: (b / b)
please help
thanks
vittorio
编辑:
感谢您选择孩子的坚定性和多种方式,我会请注意这些未来的方法!
我尝试了这种方法,但似乎我无法得到整个div(请告诉我,如果我误了某些东西,它可能太多了可能!!)。
我应该得到这个内容:
pre $
< ul>
< li> Ringo< / li>
< li> Starr< / li>
< / ul>
< / div>
> $(div.band div.member:eq(2))或其他有用的方式,我得到这个:
alert($('div.band div.member')[0]);
/ * result
< ul>
< li> Ringo< / li>
< li> Starr< / li>
< / ul>
* /
有没有办法让 .member strong> div容器也在我的节点?
$('div.band div 。会员');
会给你一个包含 jQuery对象是一个类似数组的对象,因为每个匹配的元素都被分配了一个数字属性(像索引一样)并且一个 或 您可以指定根据DOM中的位置选择特定元素,而不是选择所有元素。例如 或 编辑: 这里有一个插件,我只是敲出来 以下是 工作演示 。将 / edit 添加到URL以查看代码。如果您需要关于它如何工作的任何细节,请留下评论。它可能可以做得更健壮一些,以处理某些情况(例如,如果有其他孩子的jQuery对象的插件是chianed),但它会满足您的需求。 演示代码 HTML I'm trying to do my frist steps with jQuery but I have some trouble to understand how to find a list of child elements from a div parent element. I'm used to work with ActionScript 2 and ActionScript 3 so i could mistake some concept, like what is the better way to randomize a sequence of div elements with jQuery! I have this simple portion of HTML code: I have attempted some way to do that like map .member divs in one array and then changing the sort order but without success. when i attempted to alert element_parent[0] i thought to get the first child of my .member list of divs but it isn't. if i make an alert with element_parent[0].innerHTML i see that: Why?
How can I do to get exactly one of the members like this? I'm sure this should be easy but I just don't know how
:( please help EDIT: Thanks for the fastness and this various ways to get the selected children, I'll take a note of these ways for the future! I shoud get this content: but with one of this methods like $("div.band div.member:eq(2)") or the other useful ways, I get this: so is there a way to get the .member div container too in my node? will give you a jQuery object containing The jQuery object is an array-like object in that each matched element is assigned a numerical property (think like an index) of the object and a or Instead of selecting all elements, you can specify to select a specific element according to position in the DOM. For example or EDIT: Here's a plugin I just knocked out Here's a Working Demo. add /edit to the URL to see the code. If you need any details about how it works, please leave a comment. It could probably do with being made more robust to handle certain situations (like if there are other child elems of the jQuery object the plugin is chianed to) but it'll suit your needs. Code from the demo HTML
这篇关于用jQuery随机化一系列div元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!< div> $ c的jQuery对象$ c>匹配选择器,即div与类
成员
,它们是类 band
的div的后代。
长度
属性也被定义。获得一个元素是
//第一个元素
$('div.band div.member')[0 ]。
//第一个元素
$('div.band div.member')。get(0);
//获得第一个带有类成员元素的div
$(div.band div.member: eq(0))
//获得带有类成员元素的第一个div
$(div.band div.member:nth-child(1))
$ c
$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ {
return this.each(function(){
var $ this = $(this);
var elems = $ this.children(childElem);
elems.sort(function(){return(Math.round(Math.random()) - 0.5);});
$ this.detach(childElem);
为(var i = 0; i< elems.length; i ++)
$ this.append(elems [i]);
});
}
})(jQuery);
$(function(){
$('button ').click(function(){
$(div.band)。randomize(div.member);
});
});
(function($){
$ .fn.randomize = function(childElem){
return this.each(function(){
var $ this = $(this);
var elems = $ this.children(childElem);
elems.sort(function(){return(Math.round(Math.random )) - 0.5);});
$ this.remove(childElem);
for(var i = 0; i< elems.length; i ++)
$ this.append(elems [i]);
});
}
})(jQuery);
< div class =band>
< div class =member>
< ul>
< li>约翰< / li>
< li>列侬< / li>
< / ul>
< / div>
< div class =member>
< ul>
< li> Paul< / li>
< li> McCartney< / li>
< / ul>
< / div>
< div class =member>
< ul>
< li> George< / li>
< li>哈里森< / li>
< / ul>
< / div>
< div class =member>
< ul>
< li> Ringo< / li>
< li> Starr< / li>
< / ul>
< / div>
< / div>
<按钮>随机化< /按钮>
<div class="band">
<div class="member">
<ul>
<li>John</li>
<li>Lennon</li>
</ul>
</div>
<div class="member">
<ul>
<li>Paul</li>
<li>McCartney</li>
</ul>
</div>
<div class="member">
<ul>
<li>George</li>
<li>Harrison</li>
</ul>
</div>
<div class="member">
<ul>
<li>Ringo</li>
<li>Starr</li>
</ul>
</div>
</div>
function setArrayElements (element_parent) {
var arr = [];
//alert (element_parent[0].innerHTML);
for (var i = 0; i < element_parent.children().length; i ++) {
arr.push (element_parent[i].innerHTML);
}
}
setArrayElements($(".band"));
<div class="member">
<ul>
<li>John</li>
<li>Lennon</li>
</ul>
</div>
<div class="member">
<ul>
<li>Paul</li>
<li>McCartney</li>
</ul>
</div>
<div class="member">
<ul>
<li>George</li>
<li>Harrison</li>
</ul>
</div>
<div class="member">
<ul>
<li>Ringo</li>
<li>Starr</li>
</ul>
</div>
<div class="member">
<ul>
<li>Paul</li>
<li>McCartney</li>
</ul>
</div>
thanks
vittorio
I tried this methods, but it seems I couldn't get the entire div (please tell'me if i mistake something, it' could be too much possible!!).<div class="member">
<ul>
<li>Ringo</li>
<li>Starr</li>
</ul>
</div>
alert ($('div.band div.member')[0]);
/* result
<ul>
<li>Ringo</li>
<li>Starr</li>
</ul>
*/
$('div.band div.member');
<div>
that match the selector i.e. div with class member
that are descendents of a div with class band
. length
property is also defined. To get one element is// first element
$('div.band div.member')[0];
// first element
$('div.band div.member').get(0);
// get the first div with class member element
$("div.band div.member:eq(0)")
// get the first div with class member element
$("div.band div.member:nth-child(1)")
(function($) {
$.fn.randomize = function(childElem) {
return this.each(function() {
var $this = $(this);
var elems = $this.children(childElem);
elems.sort(function() { return (Math.round(Math.random())-0.5); });
$this.detach(childElem);
for(var i=0; i < elems.length; i++)
$this.append(elems[i]);
});
}
})(jQuery);
$(function() {
$('button').click(function() {
$("div.band").randomize("div.member");
});
});
(function($) {
$.fn.randomize = function(childElem) {
return this.each(function() {
var $this = $(this);
var elems = $this.children(childElem);
elems.sort(function() { return (Math.round(Math.random())-0.5); });
$this.remove(childElem);
for(var i=0; i < elems.length; i++)
$this.append(elems[i]);
});
}
})(jQuery);
<div class="band">
<div class="member">
<ul>
<li>John</li>
<li>Lennon</li>
</ul>
</div>
<div class="member">
<ul>
<li>Paul</li>
<li>McCartney</li>
</ul>
</div>
<div class="member">
<ul>
<li>George</li>
<li>Harrison</li>
</ul>
</div>
<div class="member">
<ul>
<li>Ringo</li>
<li>Starr</li>
</ul>
</div>
</div>
<button>Randomize</button>