Как получить значение элемента span с помощью jQuery

У меня есть следующий код:

<tr>
<td Width="50%" align="left">
<span id="ctl00_lblTotalDesc">Ext. Subtotal</span></td>
<td Width="50%" align="right">
<span id="ctl00_lblTotalValue">100,087,000.00</span></td>
</tr>

Я использовал следующее, чтобы получить значение 2-го элемента span:

spanValue = $('#ctl00_lblTotalValue').text();

Но это, кажется, не работает в Spock/Geb. Я получаю следующую ошибку:

TypeError: $(...).text is not a function

Что я делаю не так

Я получаю следующую ошибку, если использую $('#ctl00_lblTotalValue')

[object HTMLTableElement]

Консоль Firefox была бесполезна, поэтому использовал консоль Chrome.

В Chrome: если я попробую $('#ctl00_lblTotalValue'), я получу

<span id="ctl00_lblTotalValue">100,087,000.00</span>

Но .text() - выдает ошибку типа: объект # не имеет метода 'text'


person vijay pujar    schedule 04.12.2013    source источник
comment
похоже, что $ здесь не имеется в виду jQuery, попробуйте jQuery('#ctl00_lblTotalValue').text()   -  person Arun P Johny    schedule 04.12.2013
comment
какие другие библиотеки используются на странице? также правильно ли вы включили jQuery на страницу   -  person Arun P Johny    schedule 04.12.2013
comment
проверить alert($ === jQuery)   -  person A. Wolff    schedule 04.12.2013
comment
Когда я пытаюсь напечатать значение, оно возвращает null. Привет, Арун, я использовал множество селекторов на этой странице, и все они отлично работают с функцией $.   -  person vijay pujar    schedule 04.12.2013
comment
Вы, кажется, смешиваете javascript с Groovy, а Geb с jQuery и не в первый раз. Эти вещи не одинаковы. Кроме того, TypeError: $(...).text is not a function — это не ошибка Geb/Spock/Groovy, это ошибка javascript. О чем ты вообще спрашиваешь?   -  person erdi    schedule 05.12.2013
comment
Эрди, ты проголосовал за меня? Я провел много исследований и указал, является ли это ограничением с Geb. Можете ли вы объяснить мне, почему вы минусовали   -  person vijay pujar    schedule 05.12.2013
comment
Не могли бы вы объяснить, могу ли я получить значение элемента span в GEB?   -  person vijay pujar    schedule 05.12.2013


Ответы (3)


Является ли «ctl00_lblTotalValue» идентификатором, который вы присвоили диапазону, или это элемент управления на стороне сервера, автоматически назначаемый средой?

Например, если у меня есть этот код на моей странице .NET aspx

<div id="pnlHeader" runat="server"></div>

он отображается на странице html как

<div id="ctl00_pnlHeader"></div>

Если это так, мне нужно захватить его в jquery, используя этот синтаксис

$("#<%= pnlHeader.ClientID%>").text()

Если у вас серверный элемент управления, вам может понадобиться захватить текст, используя

spanValue = $("#<%= lblTotalValue.ClientID%>").text();
person Binita Mehta    schedule 04.12.2013
comment
Это селектор, который я определил на странице Spock. Я схватил селектор с веб-страницы. Идентификатор, сгенерированный для элемента span, намного сложнее, чем я написал выше. Фактический идентификатор: ctl00_cphMain_QuoSummary_gridTotals_ctl02_lblTotalValue. - person vijay pujar; 04.12.2013
comment
несмотря на то, что ID выглядит так, как будто он генерируется на стороне сервера, на странице он всегда один и тот же. Не могли бы вы написать jQuery здесь. - person vijay pujar; 04.12.2013
comment
Можете ли вы уточнить, что вы подразумеваете под написанием jQuery здесь? У меня уже было это в ответе как spanValue = $(#‹%= lblTotalValue.ClientID%›).text(); - person Binita Mehta; 05.12.2013

Кажется, у вас есть другая структура js, переопределяющая функцию $. это означает, что вместо этого вы должны использовать jQuery('...'). Другой момент, который вы должны учитывать, это то, что, насколько мне известно, во всех js-фреймворках, с которыми я работал, функция $ делает то же самое, но иногда она выбирает первый совпадающий элемент html, а затем, когда ваш вывод выглядит так:

[object HTMLTableElement]

это означает, что объект html не является элементом span. пытаться:

$('#ctl00_lblTotalValue').length

если результат был больше 1, это означает, что у вас есть более одного элемента html с одним и тем же идентификатором.

person Mehran Hatami    schedule 04.12.2013
comment
Кстати, я использовал консоль в Firefox, и результаты очень противоречивы. Я пытался использовать хром, и если я попробую $('#ctl00_lblTotalValue'), я получаю ‹span id=ctl00_lblTotalValue›100 087 000,00‹/span›. Но .text() - выдает ошибку типа: объект #‹HTMLSpanElement› не имеет метода 'text' - person vijay pujar; 04.12.2013
comment
не волнуйтесь, есть еще много способов сделать это. просто чтобы убедиться, что ваша функция $ работает, попробуйте $(/*let it be empty*/).jquery, если результатом является ваша версия jQuery, это означает, что функция $ является исходной, если нет, вам лучше попробовать jQuery('#ctl00_lblTotalValue') вместо $('#ctl00_lblTotalValue'). - person Mehran Hatami; 04.12.2013
comment
но если ваша функция $ работает и у вас все еще есть эта проблема, значит, помимо jQuery, у вас на странице есть еще одна библиотека JavaScript и эта библиотека удалила некоторые функции jQuery в вашем фреймворке jQuery, вы можете сделать это так: jQuery.fn.text = null; delete jQuery.fn.text;, если это была проблема, вы можете попробовать $('#ctl00_lblTotalValue').html(), в вашем случае это приведет к тому же результату, что и $(...).text(), дайте мне знать, если это не сработает. - person Mehran Hatami; 04.12.2013
comment
похоже, что есть ограничение с Geb. Извините за путаницу, но все селекторы в моем коде основаны на Geb, а не на полной версии jQuery. Однако он поддерживает большинство селекторов jQuery, но, похоже, есть ограничение. - person vijay pujar; 05.12.2013

Просто попробуйте это:

$("span", id:"ctl00_lblTotalValuee").text()

Предположим, что значение ct100 является константой и не генерируется серверным приложением случайным образом.

person grepit    schedule 17.10.2014