Javascript.RU

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

Убрать тег "a"
Здравствуйте. Подскажите пожалуйста, как написать скрипт (jquey), который из кода

<ul>
<li><a href="#">text1</a>
<ul>
<li><a href="#">ssss</a></li>
<li><a href="#">ssss</a>
</ul></li>
<li><a href="#">text1</a>
<ul></li>
<li><a href="#">ssss</a></li>
<li><a href="#">ssss</a></li>
</ul></li>
<li><a href="#">text1</a></li>
<li><a href="#">text1</a></li>
</ul>

получить

<ul>
<li>text1
<ul>
<li><a href="#">ssss</a></li>
<li><a href="#">ssss</a></li>
</ul></li>
<li>text1
<ul>
<li><a href="#">ssss</a></li>
<li><a href="#">ssss</a></li>
</ul></li>
<li><a href="#">text1</a></li>
<li><a href="#">text1</a></li>
</ul>


т.е если в списке у элемента li есть подсписок, то у родительского списка убрать тег "а", если у пункта родителя нет подсписков то оставить ссылку
Ответить с цитированием
  #2 (permalink)  
Старый 15.06.2009, 13:37
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

В jquey я ламер, но могу предложить решение на PHP:

Берём код

<ul>
	<li><a href='#'>MENY-1</a>
		<ul>
			<li><a href="#">ssss</a></li>
			<li><a href="#">ssss</a></li>
		</ul>
	</li>
	<li><a href="#">MENY-2</a>
		<ul>
			<li><a href="#">ssss</a></li>
			<li><a href="#">ssss</a></li>
		</ul>
	</li>
	<li><a href="#">MENY-3</a></li>
	<li><a href="#">MENY-4</a></li>
</ul>


Немного PHP:

// Чтобы сильно не усложнять основное регулярное выражение удаляем
// все переходы на новую строку, возвраты каретки и табуляции
$txt = preg_replace("/[\t\r\n]/", "", $txt);

// Замена всех одинарных кавычек на двойные (опять таки для упрошения основного RegEx-выражения)
// если Вы гарантируете, что значение атрибута Href ограничено только двойными кавычками, то это
// действие можно пропустить
$txt = preg_replace("/(<[^>]*)'([^']*)'([^>]*>)/", '$1"$2"$3', $txt);

// Собственно удаление не нужных ссылок
$txt = preg_replace("/<li><a href=\"[^\"]\">([^<]*)<\\/a><ul>/i", "<li>$1<ul>", $txt);

print $txt;

Вот результата

<ul>
	<li>MENY-1
		<ul>
			<li><a href="#">ssss</a></li>
			<li><a href="#">ssss</a></li>
		</ul>
	</li>
	<li>MENY-2
		<ul>
			<li><a href="#">ssss</a></li>
			<li><a href="#">ssss</a></li>
		</ul>
	</li>
	<li><a href="#">MENY-3</a></li>
	<li><a href="#">MENY-4</a></li>
</ul>


P.S.: Данные регулярные выражения не претендуют на звание идеальных, но у меня багов не было.
Ответить с цитированием
  #3 (permalink)  
Старый 15.06.2009, 15:04
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

2Tim: Так ТС надо же на клиенте. Можно примерно так (на коленке, так что не претендую на оптимальность):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery-1.2.6.js" ></script>
<script type="text/javascript">
<!--
function filterList() {
    $('#start').find('li:has(>ul)').find('>a').each(function(){
        $(this).replaceWith($(this).text())
    });
    return false
}
//-->
</script>
</head>
<body>
<ul id="start">
  <li>
    <a href="#">text1</a>
    <div>
    <ul>
      <li><a href="#">subtext3</a></li>
      <li><a href="#">subtext4</a></li>
    </ul>
    </div>
  </li>
  <li>
    <a href="#">text2</a>
    <ul>
      <li><a href="#">subtext3</a></li>
      <li><a href="#">subtext4</a></li>
    </ul>
  </li>
  <li><a href="#">text3</a></li>
  <li><a href="#">text4</a></li>
</ul>
<button onclick="filterList()">Filter</button>
</body>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 15.06.2009, 16:24
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

Да я понял. Регулярные выражения можно ведь и в JS использовать, чут поправить только. Я в JS просто не очень понимаю. Если ivanweb jQuery только для этого использует, возможно есть смысл с рег. выражениями поизощряться.
Ответить с цитированием
  #5 (permalink)  
Старый 15.06.2009, 16:28
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Tim,
парсить innerHTML регулярками не стоит. Нервы дороже
Ответить с цитированием
  #6 (permalink)  
Старый 15.06.2009, 17:48
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

2Kolyaj, +1
2Tim, можно сделать все это и без jQuery. по-хорошему, даже нужно
Ответить с цитированием
  #7 (permalink)  
Старый 15.06.2009, 20:13
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

Цитата:
можно сделать все это и без jQuery. по-хорошему
Поделитесь идеей?

Kolyaj про нервы метко подмечено, я всё время волнуюсь как бы они чего лишнего не оттяпали.
Ответить с цитированием
  #8 (permalink)  
Старый 15.06.2009, 21:53
Аспирант
Отправить личное сообщение для ivanweb Посмотреть профиль Найти все сообщения от ivanweb
 
Регистрация: 06.04.2009
Сообщений: 33

js скрипт конечно вариант, просто больше практики на jquery у меня
Ответить с цитированием
  #9 (permalink)  
Старый 16.06.2009, 00:43
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Цитата:
Так ТС надо же на клиенте
ТСы не всегда знают, что им нужно Я, например, сначала решил, что оно приходит каким-нибудь ajax'ом и, возможно, на сервере бы было проще/лучше решить эту проблему
Ответить с цитированием
  #10 (permalink)  
Старый 16.06.2009, 01:12
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Хм... у меня про сервер мыслей не возникло, хотя вариант
2Tim, почему бы и не поделиться?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery-1.2.6.js" ></script>
<script type="text/javascript">
<!--
function filterList() {
    var context = document.getElementById('start');
    var lis = context.getElementsByTagName('LI');
    for (var i=0, l=lis&&lis.length; i<l; i++) {
        var chldLi = lis[i].firstChild;
        var a2del = [];
        var need_clean = false;
        while (chldLi) {
            if (chldLi.nodeName=='UL') need_clean = true;
            else if (chldLi.nodeName=='A') a2del.push(chldLi);
            chldLi = chldLi.nextSibling;
        }
        if (need_clean) {
            for (var j=0, m=a2del.length; j<m; j++) {
                lis[i].insertBefore(document.createTextNode(a2del[j].innerHTML), a2del[j]);
                lis[i].removeChild(a2del[j])
            }
        }
    }
    return false
}
//-->
</script>
</head>
<body>
<ul id="start">
  <li>
    <a href="#">text1</a>
    <div>
    <ul>
      <li><a href="#">subtext3</a></li>
      <li><a href="#">subtext4</a></li>
    </ul>
    </div>
  </li>
  <li>
    <a href="#">text2</a>
    <ul>
      <li><a href="#">subtext3</a></li>
      <li><a href="#">subtext4</a></li>
    </ul>
  </li>
  <li><a href="#">text3</a></li>
  <li><a href="#">text4</a></li>
</ul>
<button onclick="filterList()">Filter</button>
</body>
</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не работает тег <script> внутри тега <div>? serviom Общие вопросы Javascript 10 26.11.2011 01:24
Как удалить html тег по id? romosyto Я не знаю javascript 5 10.06.2009 18:54
Как создать родительский тег? AgRy Events/DOM/Window 1 13.02.2009 12:21
Подскажите как убрать часть текста при нажатии на кномпу или гиперссылку. potkin Общие вопросы Javascript 6 10.10.2008 07:55
Убрать аттрибут rowSpan при помощи JavaScript Triglav Общие вопросы Javascript 5 01.10.2008 16:10