代码之家  ›  专栏  ›  技术社区  ›  Tim Visher

如何使用jquery以编程方式翻转元素属性的值?

  •  2
  • Tim Visher  · 技术社区  · 15 年前

    我刚开始进入jquery,所以如果这是一个简单的问题,我提前道歉。

    我正在和 A List Apart article on Print Previews 尝试在我正在开发的webapp中获取实时打印预览。我已经让它满意地工作了,但是我现在正在尝试将代码重构为我认为它在内部应该是什么样子。我目前有两套方法,一套用于显示缩微复制块,另一套用于删除它。我更愿意只使用一个集合来切换相关元素的适当值。

    对于CSS,这意味着禁用非打印预览表并启用打印预览表,反之亦然。对于我的缩微拷贝来说,这意味着设置 display block 而不是 none 反之亦然。

    至少对于样式表链接,我想简单地循环通过相关的 link 元素和集合 disabled !disabled 但我不知道该怎么做。我正在使用jquery,但我并不反对降低到抽象级别以下。

    我想一旦我知道如何为 链接 元素我应该能够扩展解决方案以同时切换 显示 microcopy分区的属性。

    以下是我目前为好奇者提供的功能:

    function printPreview() {
        $("link[rel*='style'][media!='print'").attr("disabled", true);
        $("link[rel*='style'][title='print preview']").attr("disabled", false);
        addPrintPreviewMicrocopy();
    }
    
    function addPrintPreviewMicrocopy() {
        $("div[id='print-preview-microcopy']").css({'display':'block'});
    }
    
    function normalView() {
        $("link[rel*='style'][media!='print'").attr("disabled", false);
        $("link[rel*='style'][title='print preview']").attr("disabled", true);
        removePrintPreviewMicrocopy();
    }
    
    function removePrintPreviewMicrocopy() {
        $("div[id='print-preview-microcopy']").css({'display':'none'});
    }
    

    事先谢谢!


    谢谢大家。这是我的最终解决方案:

    function toggleView() {
        $("link[rel*='style'][media!='print']").each( function() {
            this.disabled = !this.disabled;
        });
    }
    

    事实证明,我甚至不需要切换DIV,因为只有Stylsheets这样做。

    4 回复  |  直到 15 年前
        1
  •  3
  •   Roatin Marth    15 年前

    为了 <link> 可以切换的元素 disabled 属性与:

    $('link[rel*=style]').each(function(){
      this.disabled = !this.disabled
    })
    

    这是因为该属性是读/写的 boolean 属性为 <链路& GT; 元素。

    至于你能用的沙发床 toggle() 正如其他人所建议的。

        2
  •  5
  •   David Hedlund    15 年前

    您可以使用 toggle 功能:

    function removePrintPreviewMicrocopy() {
        $("div[id='print-preview-microcopy']").toggle();
    }
    
        3
  •  3
  •   Peter Bailey    15 年前

    这个 disabled HTML属性在技术上不是布尔值。它是一个值为“”或“disabled”的可枚举值。

    这个 残疾人 但是,DOM属性, 布尔值。

    $('selector').attr( "disabled", "" );
    $('selector').each( function() { this.disabled = false; } );
    

    另外,您的ID选择器太复杂了

    $("div[id='print-preview-microcopy']")
    

    应该是

    $("#print-preview-microcopy")
    
        4
  •  1
  •   Joe Mills    15 年前

    另一个选项是使用show()和hide()方法。

    $("#selector").show();
    $("#selector").hide();
    

    或者,如果你愿意的话,你可以使用漂亮的渐变。

    $("#selector").fadeIn("slow");
    $("#selector").fadeOut("slow");
    

    需要注意的是,“选择器”应该与相关的DIV ID或HTML标记重新调整间距。