2015-09-18 1 views
0

Я использую этот скрипт, который работает на сайте, но я хотел его изменить для другого использования. Можно ли использовать функцию waitForKeyElements для поиска текста на странице (а не текста в ссылке)?waitForKeyElements, используемый с .click()

Вот div:

<div id="action_pane" style="text-align: center;">You have run out of turns 

После того, как этот текст "Вы исчерпали поворотами." появляется, я хочу, чтобы функция click щелкнула ссылку, содержащую текст, который отличается от текста, найденного в $action_pane. Я не могу использовать это, поскольку этот текст появляется только тогда, когда он не работает. Я хочу вызвать щелчок по ссылке, содержащей текст «Начать снова». Эта ссылка всегда существует, поэтому я пытаюсь ее обойти или просто использовать рабочий скрипт.

Вот рабочий сценарий, который я хочу изменить:

function clickit (jNode) { 
    var clickEvent = document.createEvent ('MouseEvents'); 
    clickEvent.initEvent ('click', true, true); 
    jNode[0].dispatchEvent (clickEvent); 
} 

waitForKeyElements (
    "a:contains('Restart')", 
    clickit 
); 

Это моя версия, которая не работает:

function clickit() { 
    $("a:contains('Start Again')").click(); 
} 

waitForKeyElements (
    "a:contains('You have run out of turns.')", 
    clickit 
); 
+1

Было бы полезно включить элемент, который имеет текст «Начать снова». Ваш код ищет элемент 'a', который содержит« Start Again », поэтому, если это не правильный тип элемента, это может быть причиной отказа. – whrrgarbl

+0

Я сделал то, что работает, но интервал, в течение которого текст «Вы исчерпали очередь» не является точным, поэтому существует задержка, поскольку я устанавливаю интервал выше ожидаемого // setInterval (function() { $ ("a : содержит («Начать снова») »). click(); }, 150000); – Dazza

+0

На самом деле, я думаю, что неправильно прочитал, на какой элемент вы пытались посмотреть, пожалуйста, см. Мой ответ. Но я согласен с предложением @ thedeeno о том, что сохранение состояния в переменной, а не просмотр текстовых элементов для изменения, имеет смысл для игры. – whrrgarbl

ответ

1

Использование innerHTML из DOM элемента не лучший способ для сохранения состояния вашей системы. Если бы я был вами, я бы взял совсем другой подход.

В вашей игре, когда вы находитесь вне очереди, вы хотите отобразить текст «У вас закончился поворот» И начать снова. Так сформулируйте это прямо (а не косвенно).

function takeTurn() { 
    turnsLeft -= 1; 
    if (turnsLeft <= 0) { 
    showGameOverMessage(); 
    startAgain(); 
    } 
} 

Это значительно упростит ваш код.

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

+0

Это не мой сайт, а сценарий, который я пытаюсь построить, то, что я прошу, чтобы скрипт сделал, - это щелкнуть ссылку, содержащую текст, начать снова, когда текст селектора на веб-странице показывает, что вы вне очереди, используя waitforkeyelements, а не конечно, если его возможный – Dazza

0

У вас есть следующие строки в коде:

waitForKeyElements (
    "a:contains('You have run out of turns.')", 
    clickit 
); 

Но раньше вы сказали, что элемент, который вы смотрите это:

<div id="action_pane" style="text-align: center;">You have run out of turns 

Это div, не a элемент. Поэтому ваш селектор должен быть изменен на div:contains('You have run out of turns').

+0

я попробовал, чтобы при появлении текста он не нажимал «Начать снова», то, что я прошу, чтобы скрипт выполнял, - это щелкнуть ссылку, содержащую начало текста, когда текст селектора на веб-странице показывает, что вы вне очереди using waitforkeyelements – Dazza

+0

Какая часть скрипта не работает? Является ли селектором «Начать снова» получение правильного элемента? Работает ли функция щелчка? – whrrgarbl

+0

Я не знаю, я не думаю, что его $ ("a: contains ('Start Again')"). Click(); как это работает, обертывая его заданным интервалом, версия, которую я изложил, не работает выше допустимой или возможной? это должно быть другое условие im, использующее, чтобы вызвать это, используя waitforkeyelements. – Dazza

Смежные вопросы