Я создал пользовательское событие jquery под названием 'loading' в моем приложении. Я хочу добавить элемент маскировки с помощью счетчика, когда это событие будет запущено. Я могу понять эту часть без проблем. Однако некоторые элементы (изображения, входы формы и т. Д.) Не могут добавлять дочерние элементы. Мне нужно выяснить, может ли объект этого события принимать дочерние элементы. Если это невозможно, я добавлю маска spinner & к ее родительскому элементу.Как вы обнаруживаете, может ли элемент 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]' –
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/ - так что это тоже не совсем так.
Принятый ответ имеет очень хороший эффект на основе which types of nodes can be void. Он может быть заменен Jquery однострочника:
node.is("area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr")
- 1. Как вы получаете дочерние узлы?
- 2. HTML ContentEdtiable и дочерние узлы
- 3. HTML-дочерние узлы HTML не выравниваются
- 4. Как удалить дочерние узлы?
- 5. ExtJS: Как динамически добавлять дочерние узлы в treepanel
- 6. Как вы обнаруживаете двойное касание?
- 7. MooTools: Получить дочерние узлы
- 8. Как разобрать дочерние узлы?
- 9. XSLT: исключая дочерние узлы
- 10. XPATH: как получить дочерние узлы
- 11. XElement Узлы и дочерние узлы
- 12. Почему мой код не хочет добавлять дочерние узлы? (XML)
- 13. Удалить дочерние узлы
- 14. Как вы обнаруживаете, есть ли обычный текст перед элементом?
- 15. Как определить корневые дочерние узлы?
- 16. Как вы обнаруживаете window.open (...) изнутри HTA?
- 17. дочерние узлы DOM XML
- 18. Как вы обнаруживаете iPhone5 в PhoneGap?
- 19. Как вы обнаруживаете, был ли экземпляр Ruby изменен после создания?
- 20. PHP Дочерние узлы
- 21. Как разобрать дочерние узлы xml
- 22. Как получить дочерние узлы XML?
- 23. Как получить дочерние узлы Атрибут
- 24. Как вы обнаруживаете ctrl + D в C?
- 25. Как вы обнаруживаете, что загружается изображение CSS?
- 26. Как вы обнаруживаете мобильное устройство с PHP?
- 27. mvcSiteMapNode скрыть дочерние узлы
- 28. Как вы обнаруживаете повторения в списке строк?
- 29. Селен получить все дочерние узлы
indexOf не является перекрестным браузером для массивов: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf – Joe
Используйте _.indexOf, если вы поддерживаете IE8 и старше – jasssonpet
Nice. Может быть, стоит добавить '' # text'' на случай, если текстовый узел найдет свой путь. –