Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Поиск потомков (https://javascript.ru/forum/jquery/35896-poisk-potomkov.html)

mrDach 26.02.2013 06:01

Поиск потомков
 
Здараствуйте.
Каким образом можно найти элементы DOM у которых внутри нет нечего кроме текста?
Пример
<table>
	<tr>
		<td>Текст1</td>
		<td>Текст2</td>
	</tr>
	<tr>
		<td>Текст3</td>
		<td>Текст4</td>
	</tr>
</table>

нужно достать:
<td>Текст1</td>
<td>Текст2</td>
<td>Текст3</td>
<td>Текст4</td>

Уровни вложенности заранее неизвестны как и теги
ну в общем как то так):help:

danik.js 26.02.2013 07:23

Первоя что перешило в голову это селектор :not(:has(*))

рони 26.02.2013 11:05

mrDach,
дополненный вариант danik.js,
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<table>
	<tr>
		<td>Текст1</td>
		<td>Текст2</td>
	</tr>
	<tr>
		<td>Текст3</td>
		<td>Текст4</td>
        <td>
        </td>
	</tr>
</table>
<script>
var div = $("<div/>");
$(":not(:has(*), script)").each(function (index, self) {
/\S/.test($(self).text())&& div.append($(self).clone())
});
alert(div.html());
</script>
</body>
</html>

danik.js 26.02.2013 11:33

Улучшенный селектор: body :not(:has(*), :empty)
Однако элемент только с пробелами не считается пустым. Также в выборку не попадут элементы со скриптами или стилями внутри. Чтобы это учесть, можно попробовать body :not(:has(:not(style, script, meta, link)), style, script, :empty). Если все элементы заведомо видимы, то можно упросить до body :not(:has(:visible), :hidden, :empty). Производительность будет хреновой. Тем более что селектор нестандартный, поэтому выборка будет обрабатываться javascript'ом.

mrDach 26.02.2013 16:14

Все проблема решена спасибо большое:) :dance: :dance: для решения использовал ":not(:has(*), script)" но и body :not(:has(*), :empty) тоже пашет, спасибо вам. всем по плюсику:victory:


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