abriel
Actualmente estoy configurando un sitio de WordPress, usando esta plantilla de ThemeForest, y aquí está el vista previa en vivo de lo que estoy trabajando actualmente (que ahora debería estar funcionando; avíseme si no funciona).
Configuré el CSS para que el borde izquierdo cuando se desplazara fuera de color gris claro. Luego, cuando se hizo clic en el enlace, el borde izquierdo sería el color azul que seleccioné.
Como se muestra a continuación, el principal problema que tengo con la navegación está en el CSS. El enlace Portafolio (Sección Portafolio en la imagen) todavía tiene la clase seleccionada que se está aplicando, junto con el elemento de la lista interna desordenada. Me gustaría que se pareciera a la sección de blog de la imagen, donde el enlace del blog ya no se aplica al elemento de clase seleccionado.
Le pregunté al creador de la plantilla por qué ocurría esto; su respuesta fue que debe haber otro enlace debajo que contenga el atributo de título ‘allportfolio’ para que funcione correctamente. Intenté agregar este atributo al enlace principal de la cartera, pero luego cerré la lista por completo.
Cuando se crea el menú, el navegador crea la selección de Portafolio de la siguiente manera en HTML:
<ul class="main-menu" id="menu-main-menu">
<li class="parent selected" id="menu-item-1172">
<p><a href="http://localhost/portfolio/" style="color: rgb(57, 57, 57);">Portfolio</a></p>
<div>
<ul class="sub-menu">
<li class="menu-item" id="menu-item-1158"><p><a data-filter="website-design" data-category="true" href="#">Website Design</a></p></li>
<li class="menu-item" id="menu-item-1157"><p><a data-filter="print" data-category="true" href="#">Print</a></p></li>
<li class="menu-item selected" id="menu-item-1156"><p><a data-filter="motion" data-category="true" href="#">Motion</a></p></li>
<li class="menu-item" id="menu-item-1155"><p><a data-filter="identity" data-category="true" href="#">Identity</a></p></li>
<li class="menu-item" id="menu-item-1167"><p><a data-filter="logos" data-category="true" href="#">Logos</a></p></li>
</ul>
</div>
</li>
Intenté algo similar a esta respuesta, pero no funcionó porque no parecía incluir nada dentro del elemento de la lista. El siguiente código jQuery a continuación es mi intento:
/*Portfolio links remove selected CSS setting*/
$('ul#menu-main-menu ul.submenu li p a').click(
function(){
$('ul#menu-main-menu li').removeClass('parent selected');
$(this).addClass('parent menu-item');
});
Me siento atascado porque no puedo entender cómo hacer que el HTML se vea como a continuación (quitando la clase CSS ‘seleccionada’ y agregando la clase CSS ‘elemento de menú’):
<ul class="main-menu" id="menu-main-menu">
<li class="parent menu-item" id="menu-item-1172">
<p><a href="http://localhost/portfolio/" style="color: rgb(57, 57, 57);">Portfolio</a></p>
<div>
<ul class="sub-menu">
<li class="menu-item" id="menu-item-1158"><p><a data-filter="website-design" data-category="true" href="#">Website Design</a></p></li>
<li class="menu-item" id="menu-item-1157"><p><a data-filter="print" data-category="true" href="#">Print</a></p></li>
<li class="menu-item selected" id="menu-item-1156"><p><a data-filter="motion" data-category="true" href="#">Motion</a></p></li>
<li class="menu-item" id="menu-item-1155"><p><a data-filter="identity" data-category="true" href="#">Identity</a></p></li>
<li class="menu-item" id="menu-item-1167"><p><a data-filter="logos" data-category="true" href="#">Logos</a></p></li>
</ul>
</div>
</li>
ACTUALIZACIÓN: la respuesta de @limelights parecía funcionar, pero encontré jQuery que afecta los efectos de desplazamiento del enlace en el sitio web y no estaba seguro de si esa era la razón por la que la respuesta al código no funcionaba está en el archivo scripts.js de la plantilla de wordpress
/* Links roll over effect */
$('a').each(function(){
if(!$(this).data('filter') && !$(this).parent().parent().parent().hasClass('pagination'))
$(this).hoverFadeColor();
})
Además, estoy muy cerca de lo que quiero lograr, usando este código para finalmente mantener abiertos los enlaces internos:
/*Portfolio links remove selected CSS setting*/
$('ul#menu-main-menu li div ul.sub-menu:first li.menu-item p a').click(
function(){
$('ul#menu-main-menu > li').removeClass('selected');
$('ul#menu-main-menu > li').css({'color' : '#222'}).addClass('menu-item');
$('ul#menu-main-menu li div:first').show();
});
Pero, lo que todavía está haciendo (como se ve a continuación) es que todavía tiene el texto elegido como el texto seleccionado.
¡Cualquier ayuda es muy apreciada!
aguacero046
¿Esto le da el comportamiento esperado?
$('a').each(function(e){
if(!$(this).data('filter') && !$(this).parent().parent().parent().hasClass('pagination'))
$(this).hoverFadeColor();
e.preventDefault();
})
Agregar e.preventDefault() debería resolver el problema.
ACTUALIZADO EL 10/12/2012:
Intente actualizar su función de clic a lo siguiente:
$('ul#menu-main-menu li div ul.sub-menu:first li.menu-item p a').on("click",function(){
var linkClicked = $(this);
$("#menu-main-menu li").each(function(){
$(this).removeClass("selected").css({'color' : '#888'}).addClass('menu-item');
$(this).first("div").show();
});
linkClicked.css({'color' : '#222'})
});
-
Esta pregunta ya no es relevante para la pregunta recién revisada anterior. Si alguien me puede ayudar con esto, seguramente lo agradecería.
– Ariel
5 de diciembre de 2012 a las 19:27
-
¿Estás hablando de insertar esto junto con la respuesta de @limelights?
– Ariel
6 de diciembre de 2012 a las 18:45
-
Lamento decirlo, pero no, esto no me da el comportamiento esperado. 🙁 Con el tema, en realidad no permitía que ninguno de los temas funcionara correctamente (por ejemplo, la barra lateral y la cartera no se expandían al pasar el mouse).
– Ariel
6 de diciembre de 2012 a las 18:51
-
Vea el CÓDIGO actualizado, asegúrese de copiar todo, incluida la modificación .on(“clic”. (Todo el evento)
– Aguacero046
10 de diciembre de 2012 a las 15:56
-
Parece que alguien quiere que se haga el trabajo por ellos y no está tratando de aprender en función de las respuestas dadas.
– Sphvn
11 de diciembre de 2012 a las 1:42
Hice un pequeño cambio en su css y agregué algunas funciones de jquery en su página html de la siguiente manera:
Cambio CSS:
Encuentre la línea número 67 en su custom.css y reemplace la codificación de la siguiente manera,
/*Turns link background white and removes border on the left at hover*/
.Light #menu ul.main-menu > li:hover > p > a {
background:#FFF;
border-left:6px solid #F0F0F0;
}
Este anterior se reemplaza en
/*Turns link background white and removes border on the left at hover*/
.Light #menu ul.main-menu > li:hover > p > a {
background:#FFF;
/*border-left:6px solid #F0F0F0;*/
}
Agregar la función Jquery en algún lugar del archivo de encabezado o pie de página de su tema como se muestra a continuación:
<script type="text/javascript">
$(document).ready(function() {
$("#menu-main-menu li:first").addClass("selected");
$("#menu-main-menu li p a").css("border-left","none");
$("#menu-main-menu li p a").hover(function(){$(this).css("border-left","6px solid #F0F0F0");});
$("#menu-main-menu li").click(function() {
$(this).addClass("selected");
});
});
</script>
Estos cambios anteriores están funcionando para mí. Para verlo en acción: http://jsbin.com/ehagal/1
Creo que esto puede ayudarte a resolver tu problema.
-
¡Esto realmente ayudó a resolver el problema! 🙂 Ahora estoy pensando en una manera de combinar lo que escribí y ponerlo en el código que escribí arriba.
– Ariel
12 de diciembre de 2012 a las 5:33
-
No, gracias @JohnPeter 🙂 ¡Esto fue de gran ayuda! Ahora, para implementar esto en el archivo scripts.js, aquí vamos. 🙂
– Ariel
12 de diciembre de 2012 a las 6:15
henrik andersson
Si lo entiendo correctamente, esto debería ayudarlo, si puede insertar cualquier tipo de script que sea. 🙂
$('ul#menu-main-menu li div ul.sub-menu li.menu-item p a').click(function(event){
$('ul#menu-main-menu > li').removeClass('selected');
alert($('ul#menu-main-menu > li').attr('class'));
$('ul#menu-main-menu li').addClass('menu-item');
alert($('ul#menu-main-menu > li').attr('class'));
event.preventDefault();
});
¡Espero que esto sea lo que buscas! 🙂
Puedes probarlo aquí en Tinker.io
Puse dos alertas para que pueda ver que la clase en realidad se elimina y luego se agrega una clase diferente. Por supuesto, debe especificar cómo se ve la nueva clase en el css.
-
Gracias por la solución. Parece funcionar, pero el problema que sigo teniendo con el código es que cada vez que hago clic en el elemento de la lista interna, no lo mantiene abierto y, por lo tanto, elimina la clase seleccionada del enlace principal.
– Ariel
6 de diciembre de 2012 a las 3:54
-
protagonismo, intente agregar e.preventDefault() a su solución. Esa podría ser la razón por la que lo está viendo actualizar.
– Aguacero046
6 de diciembre de 2012 a las 15:10
-
Agregue $(‘ul#menu-main-menu li div ul.sub-menu li.menu-item pa’).click(function(e){ $(‘ul#menu-main-menu > li’). removeClass(‘seleccionado’); alert($(‘ul#menu-main-menu > li’).attr(‘class’)); $(‘ul#menu-main-menu li’).addClass(‘menu -item’); alert($(‘ul#menu-main-menu > li’).attr(‘class’)); e.preventDefault(); });
– Aguacero046
6 de diciembre de 2012 a las 15:14
-
¡Hecho! ¡Gracias por el aporte! 😀
–Henrik Andersson
6 de diciembre de 2012 a las 16:01
-
No hay problema @limelights, pero probé el código que reeditaste y parece que tampoco funciona. 🙁 Todavía me da el mismo efecto que el código anterior. Lamento decepcionarte.
– Ariel
6 de diciembre de 2012 a las 18:47
Agregar algo de jQuery debería resolver su problema si tiene una copia de lo que veo en la vista previa en vivo sin una personalización mencionable.
$("#menu-main-menu li").click(function(){
$("#menu-main-menu li").removeClass("selected");
});
No entendí la pregunta por completo, ¿quieres que el elemento principal no esté seleccionado cuando se seleccione el elemento secundario?
– Omid
6 de diciembre de 2012 a las 16:55
@OmidAmraei, lo siento si no fui muy claro. Quiero que el elemento principal no esté seleccionado cuando se seleccione el elemento secundario.
– Ariel
6 de diciembre de 2012 a las 17:23
Lo que veo en la vista previa en vivo es exactamente lo que quieres. Creo que has editado la plantilla con códigos incorrectos.
– Omid
6 de diciembre de 2012 a las 19:43
@OmidAmraei Veo lo que quiere decir, pero la única diferencia entre lo que estoy intentando y lo que se muestra en la Vista previa en vivo es que no quería el Todos Enlace. Eso hace que lo que quiero funcione, pero no quería el Todos enlace para aparecer en la principal portafolio Enlace.
– Ariel
6 de diciembre de 2012 a las 20:32
hola abriel Todavía estoy un poco confundido por su problema exactamente. Este es el comportamiento previsto tal como lo veo… Solo veo el programa principal con una pestaña izquierda gris cuando paso el mouse sobre un elemento en su sección. ¿No quieres que el padre tenga este estado flotante en absoluto? Por ejemplo, digamos que estoy en cartera y hago clic en “Diseño de sitio web”, el problema es qué, ¿que el contenedor principal aún muestra un estado de desplazamiento? No veo ningún comportamiento extraño en la vista previa que proporcionaste. ¿Dónde está el enlace “Todos” al que hace referencia?
– Aguacero046
10 de diciembre de 2012 a las 15:37