getElementById во временном документе не является функцией - PullRequest
1 голос
/ 16 ноября 2011

У меня проблема, когда я хочу получить идентификатор в элементе li и сохранить его во временном документе.это мой код JavaScript.

var tempNode = document.createElement("div"); //creating element for storing response
    tempNode.innerHTML=ajaxhttp.responseText;
var nodes = tempNode.getElementsByTagName("div");

ajaxhttp.responseText равен

<div id="side">
    .....    
    parent
    parent

</div>
        </li>
        <li id="recent-posts-3" class="widget widget_recent_entries">       <h2 class="widgettitle">fdfs</h2>
        <ul>
                <li><a href="example.com2011/11/16/43422/" title="fdsdfしい!&nbsp;モsdf&nbsp;モバイルdsf</a></li>
                                    </ul>
        </li>



<li id="text-7" class="widget widget_text">         
......
</div>

Извините, если слишком много, но это моя проблема.Когда я пытаюсь выполнить цикл и получить идентификатор с этим кодом

for (n=0; n<nodes.length; n++) {
 console.log(tempNode.getElementById('recent-posts-3'));
}

, ошибка не работает. И когда я пытаюсь document.getElementById('recent-posts-3');, ошибка такая же.Как я могу решить эту проблему?

Примечание:

, если в моем временном узле только это

<li id="recent-posts-3" class="widget widget_recent_entries">       <h2 class="widgettitle">fdfs</h2>
    <ul>
            <li><a href="example.com2011/11/16/43422/" title="fdsdfしい!&nbsp;モsdf&nbsp;モバイルdsf</a></li>
                                </ul>
    </li>

, это работа.но не в моем случае я хочу, чтобы все элементы.2.и я не использую jquery, я хочу чистый javascript.

Ответы [ 3 ]

3 голосов
/ 16 ноября 2011

getElementById - это метод документа, но вы используете его для элемента

Вместо этого вы можете использовать element.querySelector ():

tempNode.querySelector('li[id="recent-posts-3"]')
1 голос
/ 16 ноября 2011

Пробовал этот код в Chrome, Firefox 7, IE 8

var div = document.createElement("div");
div.innerHTML = '<a id="myId">AAAA</a>';
var a = div.getElementById('myId');
alert(a.id);

Chrome: оповещения myId

Firefox: оповещения myId

IE: дает объект не поддерживает это свойство или метод ошибки

Так что, по-видимому, в IE 8, по крайней мере, когда вы создаете с помощью document.createElement (EDIT: и при извлечении элемента), у него есть только один метод nextSibling, тогда как в Chrome и Firefox весь список методов добавляется

Итак, единственное кросс-браузерное решение, о котором я могу подумать сейчас, - это добавить элемент к скрытому элементу div в документе и затем выполнить getElementById

СМ.: http://jsfiddle.net/zMkfr/

1 голос
/ 16 ноября 2011

Идентификатор должен быть уникальным во всем документе, поэтому функция getElementById не должна быть доступной для каждого узла. Вместо этого просто используйте document.getElementById; он вернет элемент с таким идентификатором (из которых должен быть только один).

Для этого вам нужно сначала добавить div к body:

tempNode.style.display = "none"; // to visually still hide it

document.body.appendChild(tempNode);

var elem = document.getElementById("recent-posts-3");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...