Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как искать элемент по тексту? (https://javascript.ru/forum/events/27077-kak-iskat-ehlement-po-tekstu.html)

VitAl2013 02.04.2012 10:14

Как искать элемент по тексту?
 
Есть <p>тестовый тескст содержащий символы ('":;$%*)</p>
Ни класса... ничего нет у элемента, как мне его вычислить? В дальнейшем хочу дописать к нему title.
Желательно точным совпаднием, чтоб потом передать таким же новичкам (~0) в форме функции:
function addtitle("текст к которому добавляем примечание", "тескст примечания")

Спасибо

Pavel M. 02.04.2012 10:54

на jquery :contains() не подойдет ?
<p>Hello World</p>
  <p>Goodbye World</p>
  
  <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
  <script>
      $("p:contains('Hello')").attr("title", "Содержит Hello");
  </script>

VitAl2013 02.04.2012 12:17

Правильно ли я понял?:
<p>Hello World</p>
  <p>Goodbye World</p>
//формирует подопытную страницу и/или объекты

<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
//подключает jquery библиотеку функций (или то чем является jquery)

<script>
      $("p:contains('Hello')").attr("title", "Содержит Hello");
  </script>
//задействует функции jquery

Не совсем понятно как это внедрить в Greasemonkey и может так оказаться что у части людей будут проблемы с доступом в интернет (только внутренняя сеть), поэтому желатьельно иметь всё в одном скрипте. Альтернатива - достать необходимые функции из jquery и вписать их внутрь user скрипта подгружаемого greasemonkey (или браузером chrome/iron)

Через Greasemonkey способ №1
// @require		   [url]http://code.jquery.com/jquery.min.js[/url]
// ==/UserScript==
$("p:contains('Hello')").attr("title", "Содержит hello");


Способ №2 - локальный (не проверено)
Копируем jquery.min.js на локальную машину и используем:
// @resource jquery.min.js


p - параграф (объект <p></p>)
a - (объект<a></a>)

Почему не работает?:
new function at(x, y) {$("a:contains(x)").attr("title", y)};
at('Hello', 'Содержит hello');

VitAl2013 03.04.2012 14:52

а как быть с input и span объектами? И при td объекте такой скрипт добавляет title ко всем родителям искомого объекта.

uberchel 03.04.2012 15:08

Цитата:

Сообщение от VitAl2013 (Сообщение 166482)
Правильно ли я понял?:
<p>Hello World</p>
  <p>Goodbye World</p>
//формирует подопытную страницу и/или объекты

<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
//подключает jquery библиотеку функций (или то чем является jquery)

<script>
      $("p:contains('Hello')").attr("title", "Содержит Hello");
  </script>
//задействует функции jquery

Не совсем понятно как это внедрить в Greasemonkey и может так оказаться что у части людей будут проблемы с доступом в интернет (только внутренняя сеть), поэтому желатьельно иметь всё в одном скрипте. Альтернатива - достать необходимые функции из jquery и вписать их внутрь user скрипта подгружаемого greasemonkey (или браузером chrome/iron)

Через Greasemonkey способ №1
// @require		   [url]http://code.jquery.com/jquery.min.js[/url]
// ==/UserScript==
$("p:contains('Hello')").attr("title", "Содержит hello");


Способ №2 - локальный (не проверено)
Копируем jquery.min.js на локальную машину и используем:
// @resource jquery.min.js


p - параграф (объект <p></p>)
a - (объект<a></a>)

Почему не работает?:
new function at(x, y) {$("a:contains(x)").attr("title", y)};
at('Hello', 'Содержит hello');

А почему должно ? )

для a = a:contains("+x+")
для span = span:contains("+x+")
function at(x, y) {$("a:contains("+x+")").attr("title", y)};
at('Hello', 'Содержит hello');


Если вам надо для input:
function at(x, y) {$("input:text("+x+")").attr("title", y)};
at('Hello', 'Содержит hello');

Serg_pnz 03.04.2012 17:58

VitAl2013,
GM кеширует срипты и инет нужен только на момент установки скрипта.

VitAl2013 04.04.2012 07:30

А jquery он, как ресурс, тоже закэширует?

Способ №3 - положить jquery в локальную сеть и прописать пути в скрипте к нему сетевому, а потом синхронизировать файл jquery с помощью той машины у которой есть доступ в интернет.

Правильно ли я понимаю, что если input имеет name, то должно работать?:
function at(x, y) {$("input:name("+x+")").attr("title", y)};

Serg_pnz 04.04.2012 10:46

тут посмотри (win7)
c:\Users\UserName\AppData\Roaming\Mozilla\Firefox\Profiles\xxxxxxxxx.default\gm_scripts\

VarrkaN 29.12.2017 07:32

Столкнулся с похожей проблемой и у меня возник вопрос - можно ли данную проблему решить на JS? Был бы благодарен за пример реализации

Dilettante_Pro 29.12.2017 10:15

VarrkaN,
Цитата:

Сообщение от VarrkaN
можно ли данную проблему решить на JS

Можно. Используйте querySelector, indexOf и setAttribute


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