2015-11-03 64 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"]')