Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как достать данные из функции (https://javascript.ru/forum/dom-window/50261-kak-dostat-dannye-iz-funkcii.html)

igorz 19.09.2014 02:58

Как достать данные из функции
 
Здравствуйте, извиняюсь если вдруг не в тот раздел с вопросом или же вопрос сам по себе дурацкий.
Вообщем столкнулся с такой проблемой - хочу из сайта вытащить при парсинге 'name', который, как оказалось, находится в функции.
Т.е.
var elem = document.getElementsByClassName('js_playerName5');
сonsole.log(elem); 
---
[item: function, namedItem: function]

Перелопатил много чтива, но так и не понял - могу я как-то или нет добраться внутрь за текстом ?
Вот сюда.
Если смотреть исходник, то это выглядит вот так
Спасибо заранее за советы.

kostyanet 19.09.2014 07:09

В какой такой функции? Все лежит в хтмле, если брать только этот кусок, то надо взять коллекцию тегов h1 и получить с каждого textContent;

var h1s = table.getElementsByTagName('h1');
console.log(h1s[0].textContent) // тут будет ваш Фобос.


Нет, будет вот так:

Игрок: Фобос

textContent возвращает голимый текст со всех тегов внутри указанного.

igorz 19.09.2014 12:20

А вот и нет.
Когда я пробовал над сохранённой версией странички, то было всё отлично:
Делал так и получал результат:
function getPlayerNamEE(param) {
    var name = '';
    var param_split = param.split(':');
    console.log(param_split);
    var name_id = "js_playerName" + param_split[2];  //тут я получаю "js_playerName5"
    var elem = document.getElementsByClassName(name_id);   
    if (elem[0] != null) { //сюда заходит, т.к. elem[0] есть
        console.log(elem[0]);
        var player_id = elem[0].querySelector('[id^="player"]');
        if (player_id != null) {
            var listSpan = player_id.getElementsByTagName('span');
            if (listSpan[0] != null) {
                name = listSpan[0].innerHTML;
            }
        }
    }
    return name;
}

Всё потому что var elem = document.getElementsByClassName(name_id);
срабатывал, и у меня был elem[0].

А когда я начал пробовать это же но уже в живую, то elem мне возвращался в виде функции [item: function, namedItem: function]. Не как лист. Т.е. elem.length = 0 и я не могу взять elem[0] - он попросту undefined. Вот как быть ?

skrudjmakdak 19.09.2014 12:34

getElementsByClassName вроде как возвращает NodeList (грубо говоря массив)

skrudjmakdak 19.09.2014 12:37

у тебя видимо он не находит массив

<html>
	<head> 
		<title>Тестирование</title>		
	</head>

	<body>
		<div class="myclass">1</div>
		<div class="myclass1">2</div>
		<div class="myclass">3</div>
		<div>4</div>
		<script>
var collection = document.getElementsByClassName('myclass');
console.log(collection);
console.log('найдено элементов: ' + collection.length);
		</script>
	</body>

</html>

igorz 19.09.2014 13:04

Вот ещё раз, наглядно:
Пробую искать js_playerName5:
(пробую сразу 2 способами)
var elem = document.getElementsByClassName('js_playerName5');
console.log(elem);
console.log("Elem lenght: " + elem.length + " - " + elem[0]);
    
var elem = $(".js_playerName5");
console.log(elem);
console.log("Elem lenght: " + elem.length + " - " + elem[0]);

Консоль:
[item: function, namedItem: function]
Elem lenght: 0 - undefined

[prevObject: b.fn.b.init[1], context: document, selector: ".js_playerName5", jquery: "1.9.1", constructor: function…]
Elem lenght: 0 - undefined


Над сохранённой версией странички:
[td.playername.js_playerName5.vacation.inactive, item: function, namedItem: function]
Elem lenght: 1 - [object HTMLTableCellElement]

[td.playername.js_playerName5.vacation.inactive, prevObject: b.fn.b.init[1], context: document, selector: ".js_playerName5", jquery: "1.9.1", constructor: function…]
Elem lenght: 1 - [object HTMLTableCellElement]


К слову о "не находит". Он-то находит, но оно, как я понял, не массив, а функция - объект.

skrudjmakdak 19.09.2014 13:05

значит у тебя нет элемента с классом js_playerName5.
нажми ctrl + U и сделай поиск по "js_playerName5" ctrl +F

igorz 19.09.2014 13:21

Цитата:

Сообщение от skrudjmakdak (Сообщение 331339)
значит у тебя нет элемента с классом js_playerName5.
нажми ctrl + U и сделай поиск по "js_playerName5" ctrl +F

Ага, вы правы. Смотрел всё время через ctrl+shift+i. А так как вы указали его действительно нет :-/

skrudjmakdak 19.09.2014 13:31

если эти данные добавляются динамически, то тогда вам надо (да и вообще лучше там проверять) зайти во вкладку Elements(f12, отладчик) и тоже нажать ctrl + F. т.е. в чем разница между тем и этим поиском? там вы видите те данные которые вам прислал сервер и если вы добавляли\редактировали\уд аляли элементы то вы этого там не увидите. а во вкладке Elements высвечиваются данные по-факту. т.е. то что у вас есть в данный момент

igorz 19.09.2014 13:42

Цитата:

Сообщение от skrudjmakdak (Сообщение 331345)
если эти данные добавляются динамически, то тогда вам надо (да и вообще лучше там проверять) зайти во вкладку Elements(f12, отладчик) и тоже нажать ctrl + F. т.е. в чем разница между тем и этим поиском? там вы видите те данные которые вам прислал сервер и если вы добавляли\редактировали\уд аляли элементы то вы этого там не увидите. а во вкладке Elements высвечиваются данные по-факту. т.е. то что у вас есть в данный момент

Ну так вот изначально как раз и руководствовался тем что в elements. Вижу же, что там есть данный класс, а достать его не получается :-?
Добавлю - что пытаюсь достать через js из темпермонки. Может надо как-то ждать чтоб "всё прогрузилось", или всё же искать как-то по другому.


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