Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.09.2014, 02:58
Интересующийся
Отправить личное сообщение для igorz Посмотреть профиль Найти все сообщения от igorz
 
Регистрация: 19.09.2014
Сообщений: 23

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

Перелопатил много чтива, но так и не понял - могу я как-то или нет добраться внутрь за текстом ?
Вот сюда.
Если смотреть исходник, то это выглядит вот так
Спасибо заранее за советы.
Ответить с цитированием
  #2 (permalink)  
Старый 19.09.2014, 07:09
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

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


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

Игрок: Фобос

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

Последний раз редактировалось kostyanet, 19.09.2014 в 07:12.
Ответить с цитированием
  #3 (permalink)  
Старый 19.09.2014, 12:20
Интересующийся
Отправить личное сообщение для igorz Посмотреть профиль Найти все сообщения от igorz
 
Регистрация: 19.09.2014
Сообщений: 23

А вот и нет.
Когда я пробовал над сохранённой версией странички, то было всё отлично:
Делал так и получал результат:
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. Вот как быть ?
Ответить с цитированием
  #4 (permalink)  
Старый 19.09.2014, 12:34
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

getElementsByClassName вроде как возвращает NodeList (грубо говоря массив)
Ответить с цитированием
  #5 (permalink)  
Старый 19.09.2014, 12:37
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

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

<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>
Ответить с цитированием
  #6 (permalink)  
Старый 19.09.2014, 13:04
Интересующийся
Отправить личное сообщение для igorz Посмотреть профиль Найти все сообщения от igorz
 
Регистрация: 19.09.2014
Сообщений: 23

Вот ещё раз, наглядно:
Пробую искать 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]


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

Последний раз редактировалось igorz, 19.09.2014 в 13:07.
Ответить с цитированием
  #7 (permalink)  
Старый 19.09.2014, 13:05
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

значит у тебя нет элемента с классом js_playerName5.
нажми ctrl + U и сделай поиск по "js_playerName5" ctrl +F
Ответить с цитированием
  #8 (permalink)  
Старый 19.09.2014, 13:21
Интересующийся
Отправить личное сообщение для igorz Посмотреть профиль Найти все сообщения от igorz
 
Регистрация: 19.09.2014
Сообщений: 23

Сообщение от skrudjmakdak Посмотреть сообщение
значит у тебя нет элемента с классом js_playerName5.
нажми ctrl + U и сделай поиск по "js_playerName5" ctrl +F
Ага, вы правы. Смотрел всё время через ctrl+shift+i. А так как вы указали его действительно нет
Ответить с цитированием
  #9 (permalink)  
Старый 19.09.2014, 13:31
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

если эти данные добавляются динамически, то тогда вам надо (да и вообще лучше там проверять) зайти во вкладку Elements(f12, отладчик) и тоже нажать ctrl + F. т.е. в чем разница между тем и этим поиском? там вы видите те данные которые вам прислал сервер и если вы добавляли\редактировали\уд аляли элементы то вы этого там не увидите. а во вкладке Elements высвечиваются данные по-факту. т.е. то что у вас есть в данный момент
Ответить с цитированием
  #10 (permalink)  
Старый 19.09.2014, 13:42
Интересующийся
Отправить личное сообщение для igorz Посмотреть профиль Найти все сообщения от igorz
 
Регистрация: 19.09.2014
Сообщений: 23

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

Последний раз редактировалось igorz, 19.09.2014 в 13:44.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать данные в скрипт? ivaniv1900 jQuery 6 23.06.2014 16:18
Как отобразить данные из базы на форме? ascherbakov AJAX и COMET 2 12.03.2014 15:55
Как передать данные из jqGrid в текстовое поле? Rooner jQuery 2 27.09.2012 19:31
Как вывести данные из PHP Sherminator Events/DOM/Window 2 07.08.2012 20:11
как передать данные из json в названия параметров shultz1988 Общие вопросы Javascript 2 20.07.2011 11:15