2013-09-17 6 views
1

У меня есть эта простая функция:Как узнать, существует ли элемент, созданный динамически?

var x = document.createTextNode("ERROR"); 
document.body.appendChild(x); 

Итак мне нужно создать IF, чтобы проверить, если это сообщение существует [Если это сообщение было создано]. Это проблема, я не знаю, как это сделать.

GetElementByID, похоже, не работает с элементом, созданным динамически.

Любая помощь? Благодарю.

+0

'getElementById()' работает для всех элементов , а пока они находятся в DOM. Вы где-то ошибаетесь. – SLaks

+0

То же самое с lQuery .length, работает и с динамическими элементами. –

ответ

1

Вы создаете текстовый узел, а не элемент. Вам нужно создать элемент и дать ему идентификатор, чтобы иметь возможность использовать getElementById.

Я не знаю разумного способа поиска текстового узла, хотя вы всегда можете проверить текстовые узлы связанного с ним элемента и посмотреть, есть ли он там.

var message = "ERROR"; 
var t = document.createTextNode(message); 
var node = document.getElementById('content').appendChild(t); 
if (document.getElementById('content').innerHTML !== message) { 

    console.log('element not added'); 
} else { 
    console.log('element added'); 
} 

Вот скрипка:

http://jsfiddle.net/btipling/rBg4w/

+0

В случае, если вы хотите знать, вы можете проверить 'textNode' через' Node.contains' – iConnor

0

Я считаю, что это будет работать:

var x = document.createTextNode("ERROR"); 
var element = document.body.appendChild(x); //returns text node 
if(!element){ 
    //element was not added 
} 

хотя, если бы я тебя, я мог бы создать поверочный элемент с идентификатором или его класс называется ошибкой. Таким образом, вы можете применить к нему любые стили CSS.

-1

Попробуйте это:

var x = document.createTextNode("ERROR"); 
document.body.appendChild(x); 

if (document.body.innerText.indexOf('ERROR')>=0){ 
    alert('"ERROR" found'); 
} 

IndexOf не работает во всех браузерах.

Как @slowpython сказал, что я бы предпочел создать элемент DOM с идентификатором или именем.

+0

'indexOf' действительно работает во всех браузерах,' innerText', однако, нет, плюс это на самом деле не подтверждает, что узел в DOM ** - 1 ** – iConnor

+0

@ Консоль indexOf не работает для IE <9. – Tko

+0

'String.prototype.indexOf' работает во всех браузерах. – iConnor

1

Вы можете использовать document.contains, чтобы проверить, если элемент находится в DOM

Просто быстрый пример того, как это работает

document.contains($('<div>')[0]); // FALSE 

И

document.contains($('<div>').appendTo('body')[0]); // TRUE 

JQuery используется только для стенографии к созданию элемента

Это также работает для текстовые узлы и вы можете использовать их на любом узле.

document.body.contains(Node); // Example 

Поддержка браузера несколько очень хорошие

Документация: https://developer.mozilla.org/en-US/docs/Web/API/Node.contains


Вопрос особенности:

var x = document.createTextNode("ERROR"); 
document.body.appendChild(x); 
document.contains(x); // Should be TRUE 
Смежные вопросы