2009-12-09 72 views
1

這裏是我的html:jQuery選擇語法問題

<form> 
    <dl> 
     <dt>&nbsp;</dt> 
     <dd><input type="hidden"></dd> 

     <dt>Dont hide this one</dt> 
     <dd><input type="text"></dd> 
    </dl> 
</form> 

我使用jQuery來隱藏其中,輸入類型是隱藏與此代碼dt/dd元素:

$("input[type=hidden]").each(function() { 
    $(this).parent().hide().prev().hide(); 
}); 

但我也只想將其應用於dt s,其中的文字是&nbsp;。我該如何做這種選擇?

更新:也許我需要澄清:有些人在檢查dt的內容是否也是&nbsp;之前發佈了答案,它隱藏了dd。在隱藏dt和dd之前,兩個條件都必須是真的。

最終解決方案:這裏是我結束了:

$('input[type=hidden]').filter(function() { 
    return $(this).closest('dd').prev('dt').html() === '&nbsp;'; 
}).each(function() { 
    $(this).closest('dd').hide() 
      .prev('dt').hide(); 
}); 

回答

3
$("input[type=hidden]").filter(function() { 
    return $(this).parent().prev('dt').html() === "&nbsp;"; 
}).each(function() { 
    $(this).parent().hide().prev().hide(); 
}); 

這不會選擇<dt>foo&nbsp;bar</dt>

contains('&nbsp;')會。

更簡潔(以信譽Emil's answer

$("input[type=hidden]").filter(function() { 
    return $(this).closest('dd').prev('dt').html() === "&nbsp;"; 
}).closest('dd').hide().prev('dt').hide(); 
+0

對不起,誤解了你正在做的事。現在更新 – cobbal 2009-12-09 19:11:18

+0

完美!謝謝! – Andrew 2009-12-09 19:14:11

+0

由於人們已經轉貼了答案......我不能評論cobbal的代碼是缺少這個:$(「input [type = hidden]」)。each(function(){$(this).parent()。 hide(); }); hide()。prev()。filter(function(){return $(this).html()===「 」;})。hide返回 – Skawful 2009-12-09 18:31:45

1
$("input[type=hidden]").each(function() { 
    $(this).closest('dd').hide() 
      .prev('dt').hide(); 
}); 

這個代碼是找到輸入與最接近的父標記dd,隱藏它,然後尋找一個dt si金光閃閃和隱藏它。

+0

+1清理我的代碼和使其更具可讀性。 =] – Andrew 2009-12-09 19:16:04

0

的包含選擇不全部內容匹配,所以它可能爲你工作,而不是一個理想的解決方案。要做到這一點,正確的方法是使用過濾功能:

$('input[type=hidden]').filter(function() { 
    return $(this).prev().html() == '&nbsp;' 
}) 
.each(function() { 
    $(this).hide(); 
    $(this).prev().hide(); 
}); 
+0

這不起作用。它最終隱藏了整個dl。我只試圖隱藏dt和dd,其中dt包含 並且dd包含隱藏的表單元素。 – Andrew 2009-12-09 19:00:19

+0

哦,我沒有正確地說出這個問題,對不起。我現在更改了代碼。 – eWolf 2009-12-10 10:59:23

0

這也做的伎倆(改編自cobbal的回答的早期版本):

$("input[type=hidden]").each(function() { 
    if ($(this).parent().prev().filter(function() { 
     return $(this).html() === "&nbsp;"; 
    }).hide().length > 0) { 
     $(this).hide(); 
    } 
}); 
+0

我不認爲一個空的jQuery集計算爲false,if語句是否總是執行? – cobbal 2009-12-09 19:34:20

+0

噢,謝謝。現在修復。 – 2009-12-09 21:11:06