【问题标题】:How to target html 5 attribute "data-src" and replace with "src" with jQuery?如何定位 html 5 属性“data-src”并用 jQuery 替换为“src”?
【发布时间】:2013-10-18 01:33:14
【问题描述】:

我正在尝试通过使用新的 html 5“data-”属性进行存储,然后在需要时将其删除,从而找到动态加载文件和其他元素的“最佳”方法。

我的问题:

如何定位“data-”属性并将其删除,从而留下剩余的属性名称?

例如,这个:

<!-- Custom CSS -->
<link rel="stylesheet" class="custom" data-href="css/mobile.css">

会变成这样:

<!-- Custom CSS -->
<link rel="stylesheet" class="custom" href="css/mobile.css">



编辑:整个实验都是针对响应式设计(UI/性能)的,我需要能够根据设备分辨率加载 css 文件/元素。这将为较小的设备带来更高的性能,以防止不必要的数据加载。我正在使用enquire.js plugin(btw),它允许您在针对媒体查询时触发函数。因此,为了保持最新状态,我想使用“data-”属性根据设备分辨率在 DOM 中添加/删除元素。

Christian Heilmann 的本教程就是这样做的: http://christianheilmann.com/2012/12/19/conditional-loading-of-resources-with-mediaqueries/

我正在尝试将他的技术与 enquire.js 结合起来

【问题讨论】:

  • 是的,不要。 jQuery 已经有一个用于加载脚本的 getScript 函数,使用它。 api.jquery.com/jQuery.getScript
  • 但是当它是我想要有条件地加载的样式表时呢?还是图片?
  • 这些东西的行为与脚本元素非常不同。对于脚本,不要这样做。如果是针对样式表和图片,我们有一个有效的问题,但是您应该先编辑您的帖子。
  • 好的,我编辑将javascript示例更改为css示例
  • 公平,作为一个真实的答案。

标签: javascript jquery html custom-data-attribute


【解决方案1】:

假设您知道如何访问您的元素,启用是一个单行:

$(element).attr("href", $(element).data("href"));

因为data-href 什么都不做,所以你不需要删除它。只需将其镜像为真实的href 属性。要使无效,请再次使href 属性无效:

$(element).attr("href", false);

或完全删除它:

$(element).removeAttr("href");

对于&lt;img&gt; 也是同样的技巧,但使用字符串"src" 而不是"href"

【讨论】:

  • 其他元素呢? IE。

    标签?那会是一种完全不同的方法吗?

  • &lt;p&gt; 没有源属性(既没有 src 也没有 href),所以我不知道你在这里问什么。您可以在任何元素中的任何属性上使用此技巧,但某些属性对浏览器有深远的影响(例如位于文档 &lt;head&gt; 中的 &lt;script&gt; 元素上的 src 属性)并且不能只是切换到关闭而不对页面进行持久更改。
  • 这很好用,但是我选择了“false”而不是“false”:$(element).removeAttr("href"); -- 请查看我对我的问题的编辑,因为您可以更好地了解我想要实现的目标。
  • 针对两个版本进行了编辑。如果您正在寻找答案,请记住将答案标记为正确,以供未来的 SO 访问者使用。
  • 我仍然很好奇,好像将“data-”全部删除并留下剩余的“href”或我想要的任何东西都是可能的?我认为这将是理想的,例如:,如果我可以简单地将它们删除并添加回来它可能代码更少。此外,对于像

    在移动/平板设备上隐藏此文本。

    之类的示例,像这样删除/添加元素的最佳方法是什么?目标属性?
【解决方案2】:

虽然我同意值得质疑这是否是解决此问题的正确方法,但从技术角度来看,这是您访问、删除和添加元素属性的方式。

$('[data-attrName]').each(function() {
    var $el = $(this);
    var val = $el.attr('data-attrName');
    $el.removeAttr('data-attrName')
       .attr('attrName', val);
});

【讨论】:

  • 在上面查看我的 Edited 问题,如果您认为这是正确的方法,请告诉我。我就是要学习正确的技术!
【解决方案3】:

attributename 替换所有data-attributename 属性可以简单地通过循环数据对象来完成。

$(element).each(function() {
    var 
        el = $(this),
        data = el.data();

        $.each(data,function(key,value) { el.attr(key,value); });
});

不过,我会指出其他人已经指出的内容 - 我认为您已经决定这是完成某事所需要做的事情,而这可能不是您应该做的事情。

试着问一个答案能解决你实际问题的问题,而不是问一个答案能解决你在尝试解决另一个问题时遇到的问题的问题....如果你最后一句没看懂。

【讨论】:

  • 大声笑,我完全理解你的意思。我对我的问题进行了编辑,这样你就可以更好地理解我想要实现的目标。我已经在这个话题上研究了整整一个月,现在正在收集不同的技术。我现在只是想以一种易于理解的格式将它们放在一起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
相关资源
最近更新 更多