【问题标题】:Change select's class based on selected option's class根据所选选项的类别更改选择的类别
【发布时间】:2011-01-05 00:44:38
【问题描述】:

我有一个包含许多 的选定

我在大多数尝试中注意到的是,要么所有

由于我不确定我在选择器和回调逻辑中的选择在这种情况下是否特别合理或良好的做法(因为我一直在沮丧地尝试使其工作)我决定不包含我之前使用的代码尝试。相反,请参考这个小的 HTML 和 CSS 示例:

.斜体{ 字体样式:斜体; }

【问题讨论】:

  • 我不相信在不对代码添加黑客的情况下完全达到预期的效果,所以我投票删除这个问题。感谢所有回答的人。

标签: jquery html css firefox


【解决方案1】:

如果用户更改您选择的“foo”中的选项,函数将根据所选选项应用或删除斜体。

$("select").change(function(e) {
    var select = e.target;
    var option = select.options[select.selectedIndex];
    if ($(option).hasClass('italic')) {
        $(select).addClass('italic');
    } else {
        $(select).removeClass('italic');
    }
});

【讨论】:

  • 我试图避免为每个不同的 元素都有一个“指令”作为第一个
  • 没关系,我找到了 API,但它似乎没有提供任何我尚未尝试过的明显机会。
  • @Alasdair:如果您希望您的页面为用户动态和交互地工作,则无法避免更改事件。
  • 对不起,你误会了。我希望避免为每个
【解决方案2】:

nemisj 的回答完美地处理了这种行为(除了错字“esle”而不是“else”)——你只需要一些更好的 CSS 来完成它:

select.italic {
    font-style:italic;
}

select option {
    font-style:normal;
}    

select option.italic {
  font-style:italic;
}

样式的问题是选项将采用其父选择的样式,除非另有说明。因此,专门用font-style:normal; 覆盖默认选项,然后用font-style:italic; 重新设置option.italic 样式就可以了。

这是一个测试页面,显示它可以使用多个选择:http://www.spookandpuff.com/examples/selectStyles.html

【讨论】:

  • 顺便说一句,使用“highlighted”或“featured”等非可视类比“italic”更好。
【解决方案3】:

你能做的最好的事情是这样的:

$("select").change(function() {
    if ($("select option:selected").hasClass('italic')) {
        $("select").addClass('italic');
    }
    else {
        $("select").removeClass('italic');
    }
});

$("select").mousedown(function() {
    $("select").removeClass('italic');
});

正如您所说,将类应用于选择会将其应用于整个控件,而不仅仅是文本框。您对此无能为力。我的建议是捕获 mousedown 事件并删除样式。这样,当您查看选项时,您的样式就会出现。这有两个缺点:

  • 选择文本框时不会以斜体字体显示
  • 如果您使用键盘进行选择,这将不起作用。您需要为此处理更多事件。

如果这对您来说太重要了,我建议您使用自定义的选择控件(例如使用 jQuery 和无序列表或表格实现),您可以通过它来控制整个外观。

【讨论】:

  • 如果页面上有两个或更多选择框可用,您的解决方案将不起作用。如果其中一个选择框选择了斜体选项,则所有其他选项都将变为斜体!此外,使用无处不在的选择器而不是 DOM 实例是一个很大的矫枉过正。
  • jQuery 选择器只是一个例子。用适合你的东西(类或 id)改变它。
  • @kgiannakakis:是不是,太多的变化(6 行代码)只是为了使解决方案工作?代码抽象呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 1970-01-01
相关资源
最近更新 更多