2011-06-15 45 views
0

我有一个变量的HTML,我该如何做一个选择,然后每个这个变量? 例如:从html中选择一个变量,用jquery

var ht = '<div id="1" class="pp">Hi</div><div id="2">Hola</div><div id="3" class="pp"> Bonjour</div>'; 
$(ht).find(".pp").each(function(i){ 
    var i = this.id; 
    console.log(i); 
}); 

当然这是行不通的。 谢谢!

回答

4

你的代码的问题是你有几个没有父元素的兄弟.pp元素。当你用它们创建一个jQuery对象时,它会创建一个包含每个.pp元素的选择。

当您使用find时,它看起来后代元素。选择中的元素本身未经测试。您需要使用filter代替,测试中实际选择的元素,而不是他们的后代:

$(ht).filter(".pp").each(function(i){ 
    var i = this.id; 
    console.log(i); 
}); 
1

从你的HTML创建一个元素,然后在元素上进行操作:

变化:

var ht = '<div id="1" class="pp">Hi</div><div id="2">Hola</div><div id="3" class="pp"> Bonjour</div>'; 

到:

var ht = $('<div id="one" class="pp">Hi</div><div id="two">Hola</div><div id="three" class="pp"> Bonjour</div>'); 
0

实际上你需要创建这些元素的jQuery对象:

var div0 = $('<div />'); 
var div1 = $('<div />').addClass('pp').text('Bonjour'); 
div0.append(div1); 
div0.find('.pp'); // == div1 

这显然不是理想的代码,但它应该让你朝着正确的方向前进。

+0

[不真](http://jsfiddle.net/CVzwR/)。这在HTML5之前确实无效,但它工作得很好。 – lonesomeday 2011-06-15 18:09:03

+0

@ lonesomeday - 有趣。我更新了我的答案。希望你能更新你的投票;) – Jason 2011-06-15 18:11:13

+0

这并没有真正让你的答案实际上回答了这个问题。你可以像OP那样构建一个jQuery对象 - 你只需要确保你使用了正确的遍历方法。 – lonesomeday 2011-06-15 18:14:11

0

使用.nextAll()而不是.find()。您不能使用find(),因为它会在选择的后代中查找匹配的元素,但您希望在它们之间查找。

var ht = '<div id="1" class="pp">Hi</div><div id="2">Hola</div><div id="3" class="pp"> Bonjour</div>'; 


$(ht).nextAll("div.pp").each(function(i){ 

    var i = this.id; 
    console.log(i); 
}); 

http://jsfiddle.net/niklasvh/dLL5r/