Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.09.2011, 21:07
Новичок на форуме
Отправить личное сообщение для Neldmit Посмотреть профиль Найти все сообщения от Neldmit
 
Регистрация: 21.09.2011
Сообщений: 9

Как сбросить установленные прежде стили?
Здравствуйте, будте добры, подскажите. Я написал функцию, которая выбирает все параграфы в массив и при клике на определенный параграф применяет к нему одни и те же стили:
var p=document.getElementsByTagName("P");
	for(var i=0; i<p.length; i++){
	 p[i].onclick=function(){
	 this.style.border="1px solid red";
	 this.style.backgroundColor="rgb(255, 255, 204)";
	 this.style.padding="5px";
	 }
	}

но мне надо, чтобы при клике на другой параграф с уже выделенного снимались стили, то есть чтобы из всех параграфов был выделен только один. А так же при повторном клике уже на выделенный снималось выделение и с него.
Ответить с цитированием
  #2 (permalink)  
Старый 21.09.2011, 23:21
Профессор
Отправить личное сообщение для Триви Посмотреть профиль Найти все сообщения от Триви
 
Регистрация: 23.04.2010
Сообщений: 354

Покатит?

<p>one</p>
<p>two</p>
<p>three</p>

<script type="text/javascript">
var p=document.getElementsByTagName("P"), len = p.length;
for(var i=0; i<len; i++){
  p[i].onclick=function(){
    for(var j=0; j<len; j++){
      p[j].style.border="0px";
      p[j].style.backgroundColor="rgb(255, 255, 255)";
      p[j].style.padding="0px";
    }
    this.style.border="1px solid red";
    this.style.backgroundColor="rgb(255, 255, 204)";
    this.style.padding="5px";
  }
}
</script>


пи.си. а ваще для таких целей css не зря придумали))
Ответить с цитированием
  #3 (permalink)  
Старый 22.09.2011, 01:07
Новичок на форуме
Отправить личное сообщение для Neldmit Посмотреть профиль Найти все сообщения от Neldmit
 
Регистрация: 21.09.2011
Сообщений: 9

Триви,
благодарю, ещё как покатит.
Ответить с цитированием
  #4 (permalink)  
Старый 22.09.2011, 19:44
Новичок на форуме
Отправить личное сообщение для Neldmit Посмотреть профиль Найти все сообщения от Neldmit
 
Регистрация: 21.09.2011
Сообщений: 9

И хотелось бы знать как снять выделение при повторном нажатии на выделенный параграф.
Ответить с цитированием
  #5 (permalink)  
Старый 22.09.2011, 20:32
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title></title>
	<style type="text/css">
		p { padding : 10px; }
		.active { border: 5px solid red; padding: 5px; }
	</style>
</head>
<body>
	<div id="wrapper">
		<p>
		Aliquam iaculis risus in nisl vehicula a porta odio cursus. In hac habitasse platea dictumst. Sed et elit tortor. Morbi lorem neque, porta et ultricies non, egestas vitae tellus. Mauris posuere, erat vel molestie egestas, dolor purus luctus odio, ut vehicula felis erat nec mi. Aliquam ultrices hendrerit vestibulum. Cras fermentum augue eu urna rhoncus placerat at porta velit. Aliquam dictum euismod leo, et fermentum odio ultricies quis. Cras vulputate lacus eget erat lobortis vitae sodales leo suscipit. Pellentesque non felis est, id pulvinar nunc.
		</p>
		<p>
		Fusce a turpis ipsum, nec scelerisque ipsum. Nunc eget lorem at massa aliquam ornare. Duis lacinia, mi sit amet viverra rhoncus, sem leo pulvinar nunc, in lobortis velit eros vitae mi. Ut tempus lorem at dolor blandit vitae viverra quam ornare. Nulla tellus purus, fringilla in ultrices eu, imperdiet vitae quam. Integer lectus erat, eleifend ut sollicitudin vel, feugiat vitae augue. Nullam porta pretium lorem at commodo. Aliquam mauris libero, porta eu tincidunt eu, vulputate non ante. In blandit euismod suscipit. Curabitur vel felis mi, in luctus eros. Ut accumsan, risus quis bibendum ullamcorper, quam neque porttitor velit, nec suscipit ipsum orci et orci. Aliquam lorem lectus, rutrum non consequat in, condimentum vel mi. Etiam pellentesque ullamcorper elementum.
		</p>
		<p>
		Fusce ut semper lacus. Pellentesque ante nibh, suscipit ut euismod in, volutpat vel mauris. Fusce tempor elit et neque lobortis non facilisis mauris porttitor. Suspendisse egestas, sapien at tincidunt faucibus, turpis orci consectetur mauris, id blandit orci diam nec enim. Ut in leo at tellus aliquam dictum in sit amet nibh. In vitae porta elit. Vestibulum ut libero vitae purus egestas pellentesque in vel ipsum. Vivamus at augue ante, eget interdum elit. Sed urna lectus, fermentum blandit porta vel, interdum sed nibh. Etiam laoreet sagittis eros, et vehicula neque hendrerit eu. Nulla nec eros ut sem ultrices consectetur in id justo.
		</p>
		<p>
		Cras eu erat erat. Quisque varius, lectus et tempor faucibus, metus eros volutpat nunc, ac mollis elit leo vel urna. Sed ullamcorper faucibus fringilla. Sed imperdiet scelerisque lacus et ultricies. Nulla facilisi. Donec vitae orci eu lorem tincidunt auctor. Ut eu tortor eu mauris ultrices pharetra vitae suscipit tellus.
		</p>
		<p>
		Curabitur auctor ipsum ac justo vehicula hendrerit. Nunc adipiscing nibh ut nibh venenatis semper. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam eget dui purus, vitae vulputate nunc. Nunc est orci, luctus fringilla elementum ut, viverra vel enim. Ut egestas auctor lacus. Mauris non accumsan dolor. Etiam condimentum, nibh et viverra ultricies, dolor tellus imperdiet diam, sit amet pretium velit mi pharetra est. Fusce adipiscing tortor ut nisl convallis dapibus. Suspendisse sed arcu in sem elementum varius.
		</p>
	</div>
	<script>
		(function( window, elem ){
			var currentParagraph;
			function handler( e ) {
				var target = e ? e.target : window.event.srcElement;
				if ( target.nodeType === 3 ) { target = target.parentNode; }
				if ( target.nodeName.toLowerCase() === "p" && target != currentParagraph ) {
					if ( currentParagraph ) {
						currentParagraph.className = (" " + currentParagraph.className + " ").replace(" active ", "").replace(/^\s+|\s+$/, '');
					}
					currentParagraph = target;
					currentParagraph.className = (currentParagraph.className + " active").replace(/^\s+|\s+$/, '');
					return;
				}
				if ( target == currentParagraph ) {
					currentParagraph.className = (" " + currentParagraph.className + " ").replace(" active ", "").replace(/^\s+|\s+$/, '');
					currentParagraph = null;
				}
			};
			if ( elem.addEventListener ) {
				elem.addEventListener("click", handler, false);
			} else if ( elem.attachEvent ) {
				elem.attachEvent("click", handler);
			}
		})( window, document.getElementById('wrapper') );
	</script>
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 22.09.2011, 20:52
Новичок на форуме
Отправить личное сообщение для Neldmit Посмотреть профиль Найти все сообщения от Neldmit
 
Регистрация: 21.09.2011
Сообщений: 9

nikita.mmf,
спасибо... хмм, не знал, что такую простейшую операцию, как приписывание и удаление стилей с элемента по щелчку мышки так сложно осуществить на javascript.
Ответить с цитированием
  #7 (permalink)  
Старый 22.09.2011, 21:07
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

выкладываю свою версию для тогглинга классов


// короткое определение IE
var ie = /*@cc_on!@*/0,
    // рега для вырезания классов
    clreg = /\b*!*active*/!*\b\s*/g;


// обработчик клика.
var handler = function(e){
    
    // на что кликнули
    var el = ie ? event.srcElement:e.target,
        // классы у элемента
        cl = el.className;
    
    // если кликнули по параграфу
    el.tagName=="P" &&
        ~cl.indexOf("active") && 
            // если у него нет класса active, то заменяем его пустым местом
            (el.className=cl.replace( clreg, "")) || 
                // иначе - ставим
                (el.className+=" active");
};

// сокращение.
var body = document.body;
// кроссбраузерность.
ie ? body.attachEvent("onclick",handler):body.addEventListener('click',handler,0);


живой пример :
<style>.active { padding : 5px;border: 2px red solid; } </style>
<p>Lorem Ipsum...</p>
<p>Sit Dolor amet...</p>
<script>
var ie = /*@cc_on!@*/0,
    clreg = /\bactive\b\s*/g;

var handler = function(e){
    var el = ie ? event.srcElement:e.target,
        cl = el.className;
    
    el.tagName=="P" &&
        ~cl.indexOf("active") && 
            (el.className=cl.replace( clreg, "")) || 
                (el.className+=" active");
};

var body = document.body;

ie ? body.attachEvent("onclick",handler):body.addEventListener('click',handler,0);
</script>

Последний раз редактировалось melky, 22.09.2011 в 21:10.
Ответить с цитированием
  #8 (permalink)  
Старый 22.09.2011, 21:15
Новичок на форуме
Отправить личное сообщение для Neldmit Посмотреть профиль Найти все сообщения от Neldmit
 
Регистрация: 21.09.2011
Сообщений: 9

А у такого варианта есть какие-нибудь недостатки:
<p>one</p>
<p>two</p>
<p>three</p>

<script>
var styles;
var p=document.getElementsByTagName("P");
	for(var i=0; i<p.length; i++){
	p[i].onclick=function(){
		if(styles){
		styles.style.border="";
		styles.style.backgroundColor="";
		styles.style.padding="";
		}
		if(styles!=this){
		this.style.border="1px solid red";
		this.style.backgroundColor="rgb(255, 255, 204)";
		this.style.padding="5px";
		styles=this;
		}
		else {styles=null;}
	}
	}
</script>

?
Ответить с цитированием
  #9 (permalink)  
Старый 22.09.2011, 21:19
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

  1. медленно
  2. чем вам наш код не понравился ?
  3. не будет нормально работать : переменная style - для всех параграфов. будет одновременно только один элемент с данным классом.
  4. а если вы заходите поменять стили по-умолчанию (до клика). что, в скрипты лезть?

в принципе, если не хотите использовать чужой код - дерзайте свой. мы не настаиваем
Ответить с цитированием
  #10 (permalink)  
Старый 22.09.2011, 21:23
Новичок на форуме
Отправить личное сообщение для Neldmit Посмотреть профиль Найти все сообщения от Neldmit
 
Регистрация: 21.09.2011
Сообщений: 9

1) А как скорость исполнения определить? На первый взгляд всё моментально.
2) Мне все понравилось, спасибо большое, просто для меня это пока сложно, а хочу сам во всё въезжать.

3 и 4 согласен.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие div блока при первом визите на сайт Nushaba Общие вопросы Javascript 28 20.12.2013 21:24
О наследовании событий, или как корректно его отменить. JCShen Events/DOM/Window 8 09.02.2010 00:00
Как при наведении на один объект изменять стили других? greysells jQuery 4 06.12.2009 11:00
css как подавить внешние стили warobushek (X)HTML/CSS 3 22.11.2009 13:17
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20