2015-11-03 65 views
1

这很有趣。jQuery不会区分跨度和标签

HTML:

<label name="foo"></label> 
<span name="foo"></span> 

的Javascript:

var foo = $('[name="foo"]'); 
if (foo.is("span")) { 
    foo.html('haha'); 
} 

无论是labelspan将具有相同的HTML文本。但是,如果删除<span>,则标签不会更改其HTML。任何理由,以及任何方式来正确区分它们?如果你改变if(foo.is("span"))if(foo.is("label"))

+1

因为'foo.is( “跨度”)'返回true [检查当前匹配的集合元素或jQuery对象,并且如果这些元素中的至少一个匹配给定参数,则返回true。](http://api.jquery.com/is/) –

回答

7

当您使用

var foo = $('[name="foo"]'); 

一个收集要素将返回选择匹配的情况也是如此。要选择它的个别元素,请遍历它。如果匹配集中的任何元素满足条件,则在jQuery对象上使用is将返回true

.is()

检查当前匹配组针对一个选择器,元件,或jQuery对象元素,并且如果这些元素中的至少一个给定的参数相匹配返回true。

.each()使用:

$('[name="foo"]').each(function() { 
    if ($(this).is("span")) { 
     $(this).html('haha'); 
    } 
}); 

上面的代码只是用于演示目的,下面的代码是当量的上述的。

$('span[name="foo"]').html('haha'); 
1

同意图莎尔,只需使用

$('span[name="foo"]') 

代替

$('[name="foo"]')