<p id='1'></p>
<p id='1a'><br /></p>
<p id='3success'><b>Match this</b></p>
<p id='3fail'><b>Match this</b> but not now because of this test</p>
我有一個需要跳過符合下列條件檢查款只有子元素,沒有文本
- 沒有HTML元素的一些邏輯
- 只有BR或NBSP
- 只有有子某些類型的元素(b,i,img)
我可以很容易地處理1/2,但第三個我遇到了問題。我知道如何斷言孩子的一部分,$('#3fail').children().length
,但我不知道如何確定是否有額外的文字。
關於如何驗證3的任何建議?我處理元素的簡單.each
功能
$('p').each(function(){
var element = $(this)
if(matchesCondition(element)){
doLogic(element)
}
});
注意
有人張貼解答,並得到了很多upvotes的,但它不工作。這裏是一個小工具來測試答案。
http://jsfiddle.net/ncapito/k87rc/
我能夠解決@Kolink的答案
http://jsfiddle.net/ncapito/9D3tg/
var getNontextNodes;
//coffeescript generated
getNontextNodes = function (nodes) {
var cnt, n, _i, _len;
cnt = 0;
for (_i = 0, _len = nodes.length; _i < _len; _i++) {
n = nodes[_i];
if (n.textContent.trim()) {
cnt++;
}
}
return cnt;
};
$("p").each(function() {
if (
(this.children.length === this.childNodes.length)
||
(getNontextNodes(this.childNodes) === this.children.length))
$(this).append("<b style='color:green'>Success</b>");
else
$(this).append("<b style='color:red'>Failed</b>");
});
另一種方法是直接使用childElementCount財產 – gaspyr
很多事情,但人們總是驚訝......很高興我能幫助! –
@gaspyr這是[棄用](https://developer.mozilla.org/en-US/docs/Web/API/Element.childElementCount)。確實是 –