Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   помогите разобраться HTMLParagraphElement (https://javascript.ru/forum/misc/49870-pomogite-razobratsya-htmlparagraphelement.html)

nesfiraty 01.09.2014 16:50

помогите разобраться HTMLParagraphElement
 
в общем суть вопроса в следующем
1) в цикле перебрал все элементы
2) получил и текст и прочее фуфло которое нужно отфильтровать и оставить только <p></p>

проблема в том что я пытаюсь сделать так

var nodes = target.parentNode.childNodes;
for(i=0; i<nodes.length; i++){
if(nodes[i] instanceof HTMLParagraphElement){

но вот печаль не кроссбраузерно!!
(nodes[i] instanceof HTMLParagraphElement) в ие не работает как можно кроссбраузерно решить проблемку??

tsigel 01.09.2014 16:58

if (node.tagName == "P")


Только надо проверять элемент это или текстовая нода.

/**
     * @param {Node} node
     * @return {boolean}
     */
    function isTextNode(node) {
        return node.nodeType === 3;
    }

    /**
     * @param {Node} node
     * @return {boolean}
     */
    function isElement(node) {
        return node.nodeType === 1;
    }

nesfiraty 01.09.2014 22:01

спасибо попробую))

Aetae 02.09.2014 04:11

tsigel, ну на самом деле не обязательно. .tagName будет undefined только и всего.)

nesfiraty 02.09.2014 09:46

дк все таки кто нибудь для ie вариант применял?? хотя бы варианты

Aetae 02.09.2014 09:55

nesfiraty, один вариант тебе показали. Так как ты хочешь: через instanceof - сделать невозможно. Нет в осле отдельных объектов под каждый элемент, есть только общий Node.

kostyanet 02.09.2014 10:27

Обычно и делают через nodeName и .lowercase() на всякий случай. Или в ишаке и nodeName нету?

upd, вот такой есть каноничный кусок

getTextNode: function(node) {
		
		var next;
		var res = null;
		if (node.nodeType === 1) {
			if (node = node.firstChild) {
				do {
					next = node.nextSibling;
					res = this.getTextNode(node);
					if(res) return res;
				} while(node = next);
			}
		} else if (node.nodeType === 3) {
			if (/\S/.test(node.nodeValue)) {
				return node;
			}
		}
	},

tsigel 02.09.2014 10:32

http://learn.javascript.ru/basic-dom...ame-и-tagname
Можно nodeName с приведением к нижнему регистру или tagName всегда в верхнем

kostyanet 02.09.2014 10:41

А, вот оно что. Ну вот и я узнал. :)

nesfiraty 02.09.2014 14:14

спасибо ребят попробую разобраться)) только начал изучать так что за глупость не ругайте))


Часовой пояс GMT +3, время: 13:20.