Вот в том то и вопрос, как должна обрабатываться ситуация выше, если spec посредь текста?
|
если брать в расчёт пример Deff,
Цитата:
согласен наверное это сложно сделать, тогда я предложил вариант из поста 14, при таком варианте в конце скрипт посмотрит есть ли что либо в получившемся оборачивании или нет, если нет, то выдаст ошибку))) |
woojin,
Думаю проще перерисовать тот кусочек PHP, *думаю devote его в пять сек нарисовал бы (там же чисто репит одного и того же вашего теперешнего дейстия)- можно конечно делать скрипт - но имхо.. но ведь - честно говоря это - через ж |
Deff,
ладно, чего голову ломать, как ни будь сам попробую сделать примеров уже накидали, ещё может чего начитаю в доках по DOM вдруг чего пропустил важное;) |
Цитата:
Вообще, с вашей задачей тогда должен справиться такой говонкодик(код выражет только саму идею, его нужно хорошенько причесать) var str='\ <div>текст1\n\ <span>текст2\n\ {spec}\n\ </span>\n\ <p>текст3</p>\n\ <p>текст4</p>\n\ <p>текст5</p>\n\ <span>текст6\n\ {/spec}\n\ </span>\n\ текст7\n\ </div>'; alert(str) function spec( str ){ var split = str.split('{/spec}'); split = ( split[0].replace(/<(\w+)[^>]*>[\s\S]*?\{spec\}[\s\S]*?<\/\1>/,function(a){ return '{spec}' + a.replace('{spec}','') }) + '{/spec}' + split[1] ).split('{spec}'); str = split[0] + '{spec}' + split[1].replace(/<(\w+)[^>]*>[\s\S]*?\{\/spec\}[\s\S]*?<\/\1>/,function(a){ return a.replace('{/spec}','') + '{/spec}' }); return str } result = spec(str); alert(result) |
оооо!!!!!!!!!!!
вот это сработало)))) хотя бы пусть так будет - это лучше чем ломаный html на лицевой части сайта!!!! сори в карму больше "треснуть" не могу, видать уже бил))) |
<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script> <div class="messag"/> <p><strong>Позиционные селекторы</strong><br /> Эти селекторы используются для выборки объектов на основе их положения по отношению к другим элементам, например на основе вложенности или наличия вложенных объектов, порядка следования в очереди (парные, не парные, первый элемент, последний элемент).</p> <div>{spec} <p>Выбор первого элемента:<br /> <span style="color: #333399;">$(«li:first»)</span> // здесь выбирается первый элемент <li></p> <p>Выбор последнего элемента:<br /> <span style="color: #333399;">$(«p:last»)</span> // здесь выбирается последний элемент p</p> <p>Выбор каждого второго элемента начиная с 0 (индексация эллементов с нуля):<br /> <span style="color: #333399;">$(«p:even»)</span> // каждый второй параграф начиная с нулевого</p></div> {/spec} <p>Выбор каждого второго элемента начиная с первого:<br /> <span style="color: #333399;">$(«.mega-div:odd»)</span> // выбор каждого второго элемента с классом .mega-div начиная с первого (индексация с нуля)</p> </div> <div id="Test00" style="/*display:none;*/"/></div> <script type="text/javascript"> var str='<div id=St>'+$(".messag").html()+'</div>'; function Replac(str) { a = $("#Test00")//.remove(); a.append(str);//alert(">"+a.html()); var b; a.find(":contains('\{\/spec\}')").each(function(){ b=$(this); }); var c; a.find(":contains('\{spec\}')").each(function() {c=$(this); }); var ind1 = b.parents().length; //кол-во родителей var ind2 = c.parents().length; //кол-во родителей var B=b,C=c; //alert(c.html()) var arrB=[], arrC=[]; arrB[0]=b; arrC[0]=c; for(var i=0; i<ind1; i++) { for(var j=0; j<ind2; j++) { if(j)arrC[i+1]=C; if(B.get(0)!=C.get(0)) {C=c.parents().eq(j);} else break; } if(i)arrB[i+1]=B; if(B.get(0)!=C.get(0)) {B=b.parents().eq(i);} else break; } alert(B.get(0)==C.get(0)); if(i>0){ b.html(b.html().replace(/\s*(\{\/spec\})\s*/ig,' ')); arrB[i-1].after('\{\/spec\}') } if(j>0){ c.html(c.html().replace(/\s*(\{spec\})\s*/ig,' ')); arrC[j-1].before('\{spec\}'); } $("div#St").replaceWith($("div#St").html()) return a.html() } alert(Replac(str)) </script> Собственно Переношу - выше ниже к ближайшим тегам от выделенного(если спец-теги не в одной упаковке |
Jquery? Не, не слышал.
|
Aetae,
:) Если понравицо - переделаю два операнда |
Часовой пояс GMT +3, время: 19:30. |