我在我的应用程序中创建了一个名为'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