Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.08.2013, 19:16
Профессор
Отправить личное сообщение для Kvark Посмотреть профиль Найти все сообщения от Kvark
 
Регистрация: 02.04.2013
Сообщений: 225

Помогите обернуть ссылки в список?
несилен пока в яваскрипте, а полный jquery тяжоловат чтобы использоваит, пытаюсь достичь того же без .wrap().
Есть такая структура:
<fieldset>
	<legend>
		Legenda
	</legend>
	<a>
		картинка текст
	</a>
	<a>
		картинка текст
	</a>
	<a>
		картинка текст
	</a>
</fieldset>

живьем:
<fieldset id="X40" widgettype="group" class="groupBox" style="height:183px; width:100%; left:0; padding:0;">
	<legend id="X40Legend" style="">
		<span class="caption" id="X40Caption">Selected Items</span>
	</legend>
	<span id="X42" type="label" style="">Your cart is currently empty.</span>
	<a buttonid="201" id="X43Border" href="javascript:tpzDrillTable('', 'View Cart/Checkout', '201','',true)" title="View Cart/Checkout" tabindex="" content="View Cart/Checkout" style="text-align:left;position:absolute; overflow:hidden; top:49px; left:3.5%; width:91.2%; height:29px;">
		<img class="HoverImage" id="X43" onmouseover="if(top.is_ie)this.className='HoverImageHover'" onmouseout="if(top.is_ie)this.className='HoverImage'" widgettype="linklabel" align="left" src="images/obj16/tproceed.gif" alt="View Cart/Checkout" title="View Cart/Checkout" enabled="1" style="">View Cart/Checkout
	</a>
	<a buttonid="202" id="X45Border" href="javascript:tpzDrillTable('', 'Save your Cart for later', '202','',true)" title="Save your Cart for later" tabindex="" content="Save your Cart for later" style="text-align:left;position:absolute; overflow:hidden; top:82px; left:3.5%; width:91.2%; height:29px;">
		<img class="HoverImage" id="X45" onmouseover="if(top.is_ie)this.className='HoverImageHover'" onmouseout="if(top.is_ie)this.className='HoverImage'" widgettype="linklabel" align="left" src="images/obj16/tsave.gif" alt="Save your Cart for later" title="Save your Cart for later" enabled="1" style="opacity:1;">Save your Cart for later
	</a>
	<a buttonid="203" id="X47Border" href="javascript:tpzDrillTable('', 'Save your Cart as a Template', '203','',true)" title="Save your Cart as a Template" tabindex="" content="Save your Cart as a Template" style="text-align:left;position:absolute; overflow:hidden; top:115px; left:3.5%; width:91.2%; height:29px;">
	   <img class="HoverImage" id="X47" onmouseover="if(top.is_ie)this.className='HoverImageHover'" onmouseout="if(top.is_ie)this.className='HoverImage'" widgettype="linklabel" align="left" src="images/obj16/tsave_li.gif" alt="Save your Cart as a Template" title="Save your Cart as a Template" enabled="1" style="opacity:1;">Save your Cart as a Template
	</a>
	<a buttonid="3" id="X48Border" href="javascript:tpzDrillTable('', 'Cancel', '3','',true)" title="Cancel" tabindex="" content="Cancel" style="text-align:left;position:absolute; overflow:hidden; top:148px; left:3.5%; width:91.2%; height:29px;">
		<img class="HoverImage" id="X48" onmouseover="if(top.is_ie)this.className='HoverImageHover'" onmouseout="if(top.is_ie)this.className='HoverImage'" widgettype="linklabel" align="left" src="images/obj16/tcancel.gif" alt="Cancel" title="Cancel" enabled="1" style="opacity:1;">Cancel
	</a>
</fieldset>


я хочю получить такое:
<fieldset>
	<legend>
		Legenda
	</legend>
	<div>
		<ul>
			<li>
				<a>
					картинка текст
				</a>
			</li>
			<li>
				<a>
					картинка текст
				</a>
			</li>
			<li>
				<a>
					картинка текст
				</a>
			</li>
		</ul>
	</div>
</fieldset>

как такое можно сделать а то уже голову сломал весь день мучаюсь

тоесть "обернуть" все ссылки дивом, а каждую ссылку в елемент списка, чтоб нормальным столбиком вывелось (точки думаю убрать стилями)
для меня засада как вставить открывющий тэг для дива и закрывающий а так же обернуть ссылки в <ul><li></li></ul>

Последний раз редактировалось Kvark, 09.08.2013 в 19:49.
Ответить с цитированием
  #2 (permalink)  
Старый 10.08.2013, 21:15
Аватар для a_l
a_l a_l вне форума
Кандидат Javascript-наук
Отправить личное сообщение для a_l Посмотреть профиль Найти все сообщения от a_l
 
Регистрация: 15.09.2011
Сообщений: 143

Не изящно, но должно работать:
var links = document.querySelectorAll('fieldset a'),
    field = document.getElementsByTagName('fieldset')[0],
    linkTemp = '',
    div = document.createElement('div');
for(var i=0, l=links.length; i<l; i++) { 
  linkTemp += '<li>' + links[i].outerHTML + '</li>';
  links[i].outerHTML = '';
}
div.innerHTML = '<ul>' + linkTemp + '</ul>';
field.appendChild(div);
Ответить с цитированием
  #3 (permalink)  
Старый 11.08.2013, 13:03
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

заглянем в недра jquery: как видно из реализации, в цикле (each) перед каждым нужным элементом вставляется элемент, в который будет оборачиваться (insertBefore), а затем в него помещается сам элемент (appendChild)
wrap: function( html ) {
		var isFunction = jQuery.isFunction( html );
		return this.each(function(i) {
			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
		});
	},
	...
	wrapAll: function( html ) {
		if ( jQuery.isFunction( html ) ) {
			return this.each(function(i) {
				jQuery(this).wrapAll( html.call(this, i) );
			});
		}

		if ( this[0] ) {
			// The elements to wrap the target around
			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);

			if ( this[0].parentNode ) {
				wrap.insertBefore( this[0] );
			}

			wrap.map(function() {
				var elem = this;

				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
					elem = elem.firstChild;
				}

				return elem;
			}).append( this );
		}

		return this;
	},
	...
	isFunction: function( obj ) {
		return jQuery.type(obj) === "function";
	},
	...
	type: function( obj ) {
		return obj == null ?
			String( obj ) :
			class2type[ core_toString.call(obj) ] || "object";
	},
	...
	core_toString = Object.prototype.toString,
	...
	append: function() {
		return this.domManip(arguments, true, function( elem ) {
			if ( this.nodeType === 1 || this.nodeType === 11 ) {
				this.appendChild( elem );
			}
		});
	},
Ответить с цитированием
  #4 (permalink)  
Старый 12.08.2013, 16:01
Профессор
Отправить личное сообщение для Kvark Посмотреть профиль Найти все сообщения от Kvark
 
Регистрация: 02.04.2013
Сообщений: 225

спасибо, "оберточную" задачку я решил в лоб так:
function WrapIt(ContainerId, WraperElementType, WraperElementId, WraperElementClass, WrapBeforeElementId, WrapAfterElementId)
{
	document.createElement(WraperElementType);
	var tmpStr = document.getElementById(ContainerId).innerHTML
	var InsertStart = tmpStr.indexOf(document.getElementById(WrapBeforeElementId).outerHTML, 0);
	var InsertEnd = tmpStr.indexOf(document.getElementById(WrapAfterElementId).outerHTML, 0) + document.getElementById(WrapAfterElementId).outerHTML.length;
	var resultStr = tmpStr.substring(InsertStart, 0) + '\n<' + WraperElementType + ' id="' + WraperElementId + '" class="' + WraperElementClass + '">\n' + tmpStr.substring(InsertStart, InsertEnd) + '\n</' + WraperElementType + '>\n' + tmpStr.substring(InsertEnd);
	alert(tmpStr.substring(InsertEnd));
	document.getElementById(ContainerId).innerHTML = resultStr;
}

Такой метод имеет право на жизнь или могут быть какие подвохи?

Последний раз редактировалось Kvark, 12.08.2013 в 18:39. Причина: подправил
Ответить с цитированием
  #5 (permalink)  
Старый 13.08.2013, 08:41
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Kvark Посмотреть сообщение
Есть такая структура:
<fieldset>
	<legend>
		Legenda
	</legend>
	<a>
		картинка текст
	</a>
	<a>
		картинка текст
	</a>
	<a>
		картинка текст
	</a>
</fieldset>

я хочю получить такое:
<fieldset>
	<legend>
		Legenda
	</legend>
	<div>
		<ul>
			<li>
				<a>
					картинка текст
				</a>
			</li>
			<li>
				<a>
					картинка текст
				</a>
			</li>
			<li>
				<a>
					картинка текст
				</a>
			</li>
		</ul>
	</div>
</fieldset>

тоесть "обернуть" все ссылки дивом, а каждую ссылку в елемент списка
Как вариант...

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
function go() {
	var of=document.getElementsByTagName('fieldset')[0];
	var oa=of.getElementsByTagName('a');
	var od=document.createElement('div');
	var ou=document.createElement('ul');
	while (oa[0]) {
		o=document.createElement('li');
		o.appendChild(oa[0]);
		ou.appendChild(o);
	};
	od.appendChild(ou);
	of.appendChild(od);
};
</script>
</head>
<body>
<fieldset>
	<legend>
		Legenda
	</legend>
	<a>
		картинка текст 1
	</a>
	<a>
		картинка текст 2
	</a>
	<a>
		картинка текст 3
	</a>
</fieldset>
<button onclick='go();'>Go</button>
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 13.08.2013, 12:22
Профессор
Отправить личное сообщение для Kvark Посмотреть профиль Найти все сообщения от Kvark
 
Регистрация: 02.04.2013
Сообщений: 225

спасибо! то что надо по ходу...
Ответить с цитированием
  #7 (permalink)  
Старый 13.08.2013, 12:53
Профессор
Отправить личное сообщение для Kvark Посмотреть профиль Найти все сообщения от Kvark
 
Регистрация: 02.04.2013
Сообщений: 225

ksa,
подскажи как можно попутно убить у элементов прописаный стиль?
выглядит так:
<a buttonid="504" id="X31Border" href="javascript:void(0);" title="Item 4" tabindex="" content="Item 4" style="text-align: left; position: absolute; overflow: hidden; top: 280px; left: 25.200000000000003%; width: 72.9%; height: 29px; visibility: hidden;"><img class="HoverImage" id="X31" onmouseover="if(top.is_ie)this.className='HoverImageHover'" onmouseout="if(top.is_ie)this.className='HoverImage'" widgettype="linklabel" align="left" src="images/obj16/ind_green.gif" alt="Item 4" title="Item 4" enabled="0" style="opacity:0.35;">Item 4</a>


сейчас делаю так:
if (document.getElementById('X31Border')) document.getElementById('X31Border').style.cssText = "";


но остаеться слово style:
<a buttonid="504" id="X31Border" href="javascript:void(0);" title="Item 4" tabindex="" content="Item 4" style><img class="HoverImage" id="X31" onmouseover="if(top.is_ie)this.className='HoverImageHover'" onmouseout="if(top.is_ie)this.className='HoverImage'" widgettype="linklabel" align="left" src="images/obj16/ind_green.gif" alt="Item 4" title="Item 4" enabled="0" style="opacity:0.35;">Item 4</a>
Ответить с цитированием
  #8 (permalink)  
Старый 13.08.2013, 13:18
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Kvark
как можно попутно убить у элементов прописаный стиль?
...
остаеться слово style
Как вариант...

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
function go() {
	document.getElementsByTagName('div')[0].removeAttribute('style');
};
</script>
</head>
<body>
<div style='width: 100px; height: 30px; background-color: red;'></div>
<button onclick='go();'>Go</button>
</body>
</html>

http://javascript.ru/tutorial/dom/at...s#dom-atributy
Ответить с цитированием
  #9 (permalink)  
Старый 13.08.2013, 13:23
Профессор
Отправить личное сообщение для Kvark Посмотреть профиль Найти все сообщения от Kvark
 
Регистрация: 02.04.2013
Сообщений: 225

премного благодарю, все становиться намного яснея с вашей помощью
Ответить с цитированием
  #10 (permalink)  
Старый 13.08.2013, 13:26
Профессор
Отправить личное сообщение для Kvark Посмотреть профиль Найти все сообщения от Kvark
 
Регистрация: 02.04.2013
Сообщений: 225

последний вопрос по данной теме, а как усовершенствовать даную функцию что бы она так же была рекурсивной? Тоесть если у елемента есть вложеные елементы - то и им стили убрать?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите обновить список игроков victork jQuery 0 13.09.2012 14:16
Помогите сделать список из выборки shaltay jQuery 15 03.04.2011 17:54
Помогите вставить в форму не только чекбоксы но и выпадающий список seva_81 Серверные языки и технологии 3 20.09.2010 10:02
ССЫЛКИ (Помогите новичку) meggen (X)HTML/CSS 8 30.11.2009 10:51
Помогите с формированием ссылки AnGor Общие вопросы Javascript 0 27.08.2008 17:53