Что нового

Проверить наличие определенной строки таблицы внутри формы (html)

Сообщения
119
Репутация
-6
Код:
<form id="command-data-form" action="/" method="post" onsubmit="this.submit.disabled=true;">
  <input type="hidden" name="attack" value="true" />
  <table class="vis" width="300">
        <tr><th  colspan="2">Приказ</th></tr>
        <tr><td>Пункт назначения:</td><td><span class="village_anchor" data-player="" data-id=""><a href="/" >Текст</a></span></td></tr>
  <tr><td>Игрок:</td><td><a href="/" >Игрок</a></td></tr>
Скрипт должен делать выбор, если есть строка
Код:
<tr><td>Игрок:</td><td><a href="/" >Игрок</a></td></tr>
, то нужно прекратить выполнение. Как правильно и лучше всего выцепить присутствие "Игрок:", если используется IE?

Мой вариант заканчивается на этом:
Код:
$oForm = _IEGetObjById($oIE, "command-data-form")
; чего-то там в духе $oForm.table... Магия
IF $oForm.table.magic = "Игрок:" Then MsgBox (0, "Упс", "Завершено") EndIf
 
Автор
Э
Сообщения
119
Репутация
-6
Я накалял DOM:
Код:
document.getElementById('formID').getElementsByTagName('table').row[2].cells[0].innerHTML
Но он в песочнице из под JS не работает. Я в DOM не силён. :-\
 

gunter123

Продвинутый
Сообщения
129
Репутация
52
Код:
$oIE.document.getElementById('formID').getElementsByTagName('table')[0].rows[2].cells[0].innerText  ; вот так правильнее будет
$oIE.document.getElementsByClassName('vis')[0].rows[2].cells[0].innerText  ; Так тоже работает
 
Автор
Э
Сообщения
119
Репутация
-6
Благодарю. Я так понял, что где элемент не уникален, т.е. не ID, то использовать нужно указатель на элемент.

Код:
Local $oIE = _IEAttach($title)
_IEAction($oIE, "refresh") ; проверка, что окно нужное
Local $sPlayerFlag = $oIE.document.getElementById('command-data-form').getElementsByTagName('table')[0].rows[2].cells[0].innerText
MsgBox(0, '', $sPlayerFlag)
Exit

:( Ошибки:
Код:
" ==> Subscript used on non-accessible variable.:
Local $sPlayerFlag = $oIE.document.getElementById('command-data-form').getElementsByTagName('table')[0].rows[2].cells[0].innerText
Local $sPlayerFlag = $oIE.document.getElementById('command-data-form').getElementsByTagName('table')^ ERROR
>Exit code: 1    Time: 18.45
The requested action with this object has failed
Subscript used on non-accessible variable.

Переезжать на 3.3.12? :shok: Попробую еще из под 64-битной запустить.


Добавлено:
Сообщение автоматически объединено:

В связи с тем, что представленное выше упало в ошибку - на getElementsByTagName() грабли, я решил поискать иные варианты.

Код:
Local $sPlayerFlag = $oIE.document.getElementById('command-data-form').getElementsByTagName('span') ; пустота
Local $sPlayerFlag = $oIE.document.getElementById('command-data-form').getElementsByTagName('span')[0]; Subscript used on non-accessible variable.
Local $sPlayerFlag = $oIE.document.getElementById('command-data-form').getElementsByTagName('span')[0].innerText; Subscript used on non-accessible variable.



Добавлено:
Сообщение автоматически объединено:

Пришел к такому варианту:
Код:
; Внутри формы с Id существуют Span с классами, в том числе с нужным data-*, но так как ссылку по классу мне так не удалось сделать, то обход по всем Span в форме
$oForm = $oIE.document.getElementById('formId') ; Object
$oElement = _IETagNameGetCollection($oForm, 'tag', 0) ; Object
$sElement = $oElement.getAttribute('data-*'); String or Keyword (fail)
If IsString($sElement) and $sElement > 0 Then
	  ; Ok
EndIf

Теперь, по-моему, короче некуда. :D

Буду признателен, если кто-то напишет, как его улучшить.

Как нужно правильно делать, если ищете по классу или тэгу. Сам не проверял, но так не пробовал:
Код:
$oElements = $oIE.document.getElementsByTagName('table')

for $oElement in $oElements
  ; делаем, что требуется
next
 
Верх