Убрать тег "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 есть подсписок, то у родительского списка убрать тег "а", если у пункта родителя нет подсписков то оставить ссылку |
В 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.: Данные регулярные выражения не претендуют на звание идеальных, но у меня багов не было. |
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> |
Да я понял. Регулярные выражения можно ведь и в JS использовать, чут поправить только. Я в JS просто не очень понимаю. Если ivanweb jQuery только для этого использует, возможно есть смысл с рег. выражениями поизощряться.
|
Tim,
парсить innerHTML регулярками не стоит. Нервы дороже :) |
2Kolyaj, +1 :)
2Tim, можно сделать все это и без jQuery. по-хорошему, даже нужно ;) |
Цитата:
Kolyaj про нервы метко подмечено, я всё время волнуюсь как бы они чего лишнего не оттяпали. |
js скрипт конечно вариант, просто больше практики на jquery у меня
|
Цитата:
|
Хм... у меня про сервер мыслей не возникло, хотя вариант :)
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> |
Часовой пояс GMT +3, время: 03:05. |