Javascript.RU

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

Цепочка фильтров по содержимому
Приветствую!
В общем дело обстоит так:
Занят пользовательским скриптом. Есть элементы вида
<tr class="alliance" style="display: table-row">
	<td align="left" valign="center" height="100">
		<div class="ofblock2">
		  <b>
			Отправлено: 
			<a href="...">Отправитель</a>
		  </b>
		   (12-07-22 14:31:35)
		  <br>
		  <b>Тема:</b>
		   Общее сообщение
		  <br>
		  <b>Содержание:</b>
		  <br>
		   текст сообщения
		</div>
	</td>
	<td>
	...
	</td>
</tr>

и
<tr class="alliance" style="display: table-row">
  <td align="left" valign="center" height="100">
    <div class="ofblock2">
      <b>
        Отправлено: 
        <a href="...">Отправитель</a>
      </b>
       (12-07-24 14:49:07)
      <br>
      <b>Тема:</b>
      <b>Общее сообщение</b>
       Куплю
      <br>
      <b>Содержание:</b>
      <br>
       текст сообщения
    </div>
  </td>
  <td align="center" valign="center">
    ...
  </td>
</tr>


Их различие в наличии тега <b> для "Общее сообщение". Мне надо найти как раз это самое общее сообщение с тегом. Делаю я это так:
$('tr',$(table)).each(function(indx){
        ...
		}else if($(this).is('*:has(b):contains(Общее сообщение)')){
			$(this).addClass('alliance');
		...
	});


Только по непонятным мне причинам поиск срабатывает и на общее сообщение вне тега <b>. Объясните почему так и как будет правильно?
Ответить с цитированием
  #2 (permalink)  
Старый 24.07.2012, 18:50
Кандидат Javascript-наук
Отправить личное сообщение для Nightmare Посмотреть профиль Найти все сообщения от Nightmare
 
Регистрация: 16.04.2010
Сообщений: 133

$('tr b').filter(function() { return $(this).text() == 'your_message'  }).addClass('alliance');


Если я правиьно понял вопрос.
Ответить с цитированием
  #3 (permalink)  
Старый 24.07.2012, 19:22
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,220

$('table tr').each(function(indx){

        //...
	if($(this).find("b:contains('Общее сообщение')").length){
			$(this).addClass('alliance');
        }
		//...
	});
Ответить с цитированием
  #4 (permalink)  
Старый 24.07.2012, 19:24
Новичок на форуме
Отправить личное сообщение для glukonator Посмотреть профиль Найти все сообщения от glukonator
 
Регистрация: 24.07.2012
Сообщений: 4

Спасибо, навели на мысль:
}else if($('b:contains(Общее сообщение)',$(this)).length != 0){ 
	$(this).addClass('alliance');


Так работает =)
Но хотелось бы понять почему не работал первоначальный вариант? Где там косяк?

UPD: хо-хо =) не было ответа Deff, когда свой катал) Однако почти похоже.

UPD2: возник немного офтоповый вопрос.. вот есть два варианта:
if($(this).is('*:contains(System)')){ 
	$(this).addClass('system');

	
	
if($('*:contains(System)'),$(this).length){ 
	$(this).addClass('system');


Что будет работать быстрей? Я конечно сомневаюсь что там разница будет существенная, но мне так.. для общего развития) И если можно с объяснением возникновения разницы (для понимания)

Последний раз редактировалось glukonator, 24.07.2012 в 19:40.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить расширение файла по содержимому? exvion Firefox/Mozilla 1 15.04.2012 22:16
Растянуть элемент по содержимому AnToxa Элементы интерфейса 11 09.04.2012 22:13
iframe и как получить доступ к его содержимому syegorius jQuery 13 14.04.2011 22:05
Доступ к содержимому одинаковых тегов Welemir Events/DOM/Window 1 10.08.2009 02:20
Обращение к содержимому динамически добавляемого фрейма Esciloner Элементы интерфейса 4 21.06.2007 14:15