我在我的應用程序中創建了一個名爲'loading'的自定義jquery事件。當這個事件被觸發時,我想附加一個帶有微調器的遮罩元素。我可以找出沒有問題的部分。但是,一些元素(圖像,表單輸入等)不能附加子元素。我需要能夠檢測此事件的目標是否可以接收子元素。如果它不能,那麼我將添加微調框&它的父元素。如何檢測html元素是否可以附加子節點?
回答
你必須檢查名稱:
/*global $, jQuery */
function isVoid(el) {
var tags = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input',
'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'],
i = 0,
l,
name;
if (el instanceof jQuery) {
el = el[0];
}
name = el.nodeName.toLowerCase();
for (i = 0, l = tags.length; i < l; i += 1) {
if (tags[i] === name) {
return true;
}
}
return false;
}
而且使用這樣的:
var el = document.getElementById('el'),
elj = $('#el');
if (!isVoid(el)) {
// append
}
你可以添加子元素,他們只是不會渲染。這可能聽起來像語義上的區別,但它對於您的問題至關重要:DOM不知道是否顯示特定標記。
最好的辦法就是檢查手冊:
var allowChildren = function(elem) {
return ! (elem.nodeName in { INPUT : true, IMG : true }) ;
};
我還從未見過布爾語法。它有效嗎?所以我想我可以查找void元素的規格,並將其添加到該散列。 – demersus
我認爲創建一個void元素表將是唯一真正的解決方案。雖然我假設你的意思是'return!{input:true,img:true} [elem.nodeName]' – 2012-06-22 18:37:08
http://jsfiddle.net/mblase75/eGyRH/3/ - Chrome允許我將一個子元素添加到' '標記,即使它沒有顯示。它在DOM調試器中可見,只是不在瀏覽器窗口中。 – Blazemonger
http://jsfiddle.net/mblase75/eGyRH/3/ - Chrome允許我將一個子元素添加到<input>
標記中,即使它完全不顯示。它在DOM調試器中可見,只是不在瀏覽器窗口中。
不過,我可以測試它的.width()
,看看這是等於零或不:http://jsfiddle.net/mblase75/eGyRH/4/
alert($('.element').append('<span>asdf</span>').children().width());
然而,這也將是零寬度如果,例如,我加入了跨度隱藏div:http://jsfiddle.net/mblase75/eGyRH/5/ - 所以它也不完全可靠。
接受的答案有一個很好的功能基於。它可以通過一個jQuery的一行替換爲:
node.is("area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr")
- 1. 如何檢查HTML元素是否是一個結束節點?
- 2. 如何確定元素是否可以有html子元素?
- 3. 如何檢測元素文本節點
- 4. 如何檢測滾動框(html元素)是否可滾動
- 5. - 是否可以檢測用React點擊的元素的ID?
- 6. 如何檢測XML元素是否有子元素
- 7. 如何檢測我選擇的子節點是否是特定的子節點?
- 8. 追加節點列表,以HTML元素
- 9. 如何檢測html元素是否可以被選擇器描述?
- 10. 如何檢查一個DOM節點是否是`html`節點
- 11. 可以使用jQuery將頂點元素附加到html嗎?
- 12. 檢測元素是否真的可見
- 13. 是否有可能檢測何時檢測到新元素
- 14. 檢查xml元素是否存在(沒有子節點)
- 15. 如何比較節點數組中是否存在HTML元素?
- 16. 如何檢查jQuery UI插件是否附加到元素?
- 17. 是否可以附加節點ID與JMS消息?
- 18. Xml元素節點被附加兩次
- 19. 如何檢查是否元素節點包含XSL特定值
- 20. 如何檢測是否有子節點被觸摸:Sprite Kit
- 21. 是否有任何HTML元素可以用作「ID」元素?
- 22. 是否可以刪除「檢查元素」?
- 23. 檢測附加到元素的插件
- 24. 在附加元素jQuery檢測事件
- 25. jQuery:如何檢測一個元素是否被點擊?
- 26. 如何檢查一個節點是否是另一個節點的子節點?
- 27. 如何檢查元素是否加載
- 28. 檢查節點是否存在並添加子節點
- 29. 如何HTML元素附加功能
- 30. Selenium C#Webdriver如何檢測元素是否可見
indexOf不是數組的跨瀏覽器:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf – Joe
使用_.indexOf如果您支持IE8和更老的 – jasssonpet
尼斯。爲了防止文本節點進入,可能值得添加「#text」。 – 2012-06-22 18:41:47