Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何触发与当前按钮关联的远程元素?_Jquery_Hover_Mouseevent_Contains - Fatal编程技术网

Jquery 如何触发与当前按钮关联的远程元素?

Jquery 如何触发与当前按钮关联的远程元素?,jquery,hover,mouseevent,contains,Jquery,Hover,Mouseevent,Contains,如何触发与当前按钮关联的远程元素 比如说, HTML 西德尔 给他们两个相同的.class给他们两个相同的.class据我所知,你不能真的触发伪类,比如:以那种方式悬停,但你可以使用一个类或在JS中的mouseenter/mouseleave事件中设置样式,或者直接更改CSS,比如: $(".menu-1 li").on({ mouseenter: function () { var index = $(this).index(); $('.menu-2 li

如何触发与当前按钮关联的远程元素

比如说,

HTML

西德尔


给他们两个相同的
.class
给他们两个相同的
.class

据我所知,你不能真的触发伪类,比如:以那种方式悬停,但你可以使用一个类或在JS中的mouseenter/mouseleave事件中设置样式,或者直接更改CSS,比如:

$(".menu-1 li").on({
    mouseenter: function () {
       var index = $(this).index();
       $('.menu-2 li a').eq(index).css('color', 'green');
    },
    mouseleave: function() {
       var index = $(this).index();
       $('.menu-2 li a').eq(index).css('color', 'black');
    }
});​

或者与班级一起,以两种方式工作:

$(".menu-1 li, .menu-2 li").on({
    mouseenter: function () {
        var index = $(this).index(),
            elems = $('.menu-1 li a:eq('+index+'), .menu-2 li a:eq('+index+')');
        $(elems).addClass('hover');
    },
    mouseleave: function () {
        var index = $(this).index(),
            elems = $('.menu-1 li a:eq('+index+'), .menu-2 li a:eq('+index+')');
        $(elems).removeClass('hover');
    }
});​

据我所知,您无法以这种方式触发伪类,如:hover,但您可以使用类或在JS中的mouseenter/mouseleave事件中设置样式,或直接更改CSS,如:

$(".menu-1 li").on({
    mouseenter: function () {
       var index = $(this).index();
       $('.menu-2 li a').eq(index).css('color', 'green');
    },
    mouseleave: function() {
       var index = $(this).index();
       $('.menu-2 li a').eq(index).css('color', 'black');
    }
});​

或者与班级一起,以两种方式工作:

$(".menu-1 li, .menu-2 li").on({
    mouseenter: function () {
        var index = $(this).index(),
            elems = $('.menu-1 li a:eq('+index+'), .menu-2 li a:eq('+index+')');
        $(elems).addClass('hover');
    },
    mouseleave: function () {
        var index = $(this).index(),
            elems = $('.menu-1 li a:eq('+index+'), .menu-2 li a:eq('+index+')');
        $(elems).removeClass('hover');
    }
});​

我使用的方法是用
.hover
类替换
:hover
,并将CSS更改分配给该类。然后我为每个
li
添加了
data-
属性,并对其进行了过滤。(使用类会导致问题,因为如果不选择
悬停
类,我无法读取任意类属性。)

有点复杂,但它留下了一些非常简短的代码,如果需要的话,它允许对元素进行重新排序

HTML:

CSS:


我使用的方法是用
.hover
类替换
:hover
,并将CSS更改分配给该类。然后我为每个
li
添加了
data-
属性,并对其进行了过滤。(使用类会导致问题,因为如果不选择
悬停
类,我无法读取任意类属性。)

有点复杂,但它留下了一些非常简短的代码,如果需要的话,它允许对元素进行重新排序

HTML:

CSS:


和另一个使用
:n子项的变体:

$lis = $('.menu li');
$lis.hover(function() {
    var index = $(this).index() + 1;
    $lis.filter(':nth-child(' + index + ')').addClass('hovered');
}, function() {
    $lis.removeClass('hovered');
});​

演示:

和另一个使用
:n子项的变体:

$lis = $('.menu li');
$lis.hover(function() {
    var index = $(this).index() + 1;
    $lis.filter(':nth-child(' + index + ')').addClass('hovered');
}, function() {
    $lis.removeClass('hovered');
});​

演示:

是否无法使用
id
class
data-x
属性来标识元素之间的关系?通过文本内容进行匹配是相当缓慢和丑陋的。另外,如果菜单1中有
按钮1
,菜单2中有
按钮11
,会发生什么情况。当使用
:contains
是时,它们将匹配。不必按文本匹配,欢迎提供更好的建议/解决方案。谢谢。您是否无法使用
id
class
data-x
属性来标识元素之间的关系?通过文本内容进行匹配是相当缓慢和丑陋的。另外,如果菜单1中有
按钮1
,菜单2中有
按钮11
,会发生什么情况。当使用
:contains
是时,它们将匹配。不必按文本匹配,欢迎提供更好的建议/解决方案。谢谢。请用具体的代码示例进行解释。我怀疑它不会像你想象的那么容易工作。请用一个具体的代码示例来解释。我怀疑它不会像你想象的那么容易工作。回答得好,但我不喜欢假设每个列表中的元素总是以相同的顺序排列。@mblase75-是的,它们必须以正确的顺序排列,否则需要某种标识符,例如数据属性等,或者使用内容来识别它们。最后一个不是很有效率的方法仍然有效。在不更改HTML标记和不使用内容的情况下,我唯一能想到的方法是使用索引。回答得好,但我不喜欢假设每个列表中的元素总是以相同的顺序彼此排列。@mblase75-是的,它们必须以正确的顺序排列,否则需要某种标识符,例如数据属性等,或者使用内容来识别它们。最后一个不是很有效率的方法仍然有效。在不改变HTML标记和不使用内容的情况下,我唯一能想到的方法就是使用索引。谢谢你的回答,mblase。我喜欢它的简单!但是我想知道,通过向li元素添加
data num=“x”
,这是否是一个有效的html?@lauthiamkok是的,这是一个有效的HTML5属性,甚至HTML4也允许向标记添加新属性(如果无法识别,将忽略这些属性)。jQuery自动导入所有
数据-
属性,以便与
.data()
方法一起使用,这使得它可以方便地将任意数据存储在DOM元素本身中。
这是一个有效的HTML5属性,即使HTML4也允许向标记添加新属性(如果无法识别这些属性,将忽略这些属性)
很高兴知道这一点!非常感谢!谢谢你的回答。我喜欢它的简单!但是我想知道,通过向li元素添加
data num=“x”
,这是否是一个有效的html?@lauthiamkok是的,这是一个有效的HTML5属性,甚至HTML4也允许向标记添加新属性(如果无法识别,将忽略这些属性)。jQuery自动导入所有
数据-
属性,以便与
.data()
方法一起使用,这使得它可以方便地将任意数据存储在DOM元素本身中。
这是一个有效的HTML5属性,即使HTML4也允许向标记添加新属性(如果无法识别这些属性,将忽略这些属性)
很高兴知道这一点!非常感谢!
ul li.hover a {
    color: green;
}​
$lis = $('.menu li');
$lis.hover(function() {
    var index = $(this).index() + 1;
    $lis.filter(':nth-child(' + index + ')').addClass('hovered');
}, function() {
    $lis.removeClass('hovered');
});​