【问题标题】:Can't change link's title property无法更改链接的标题属性
【发布时间】:2014-07-08 19:24:26
【问题描述】:

我正在使我的网站多语言化。因此,当单击语言按钮时,我通过 jQuery 更改文本。这适用于所有文本,但不适用于我在导航中用于悬停效果的链接的标题属性。

链接如下:

<div class="nav-container">
  <!-- Navigation for Portfolio -->
  <div class="nav" id="services">
    <a href="#" class="thumb tr" title="Leistungen" key="menu_business"><span><img src="images/menu_icons/services.png" alt="" /></span></a>
  </div>
</div>

对于我使用的文本,例如(有效!):

<h4 class="jobtitle tr" key="companyfield">blabla</h4>

我的函数如下所示:

$(document).ready(function() {
  // onclick behavior
  $('.lang').click( function() {
    var lang = $(this).attr('id'); // obtain language id

    // translate all translatable elements
    $('.tr').each(function(i) {
      if($(this).attr('key').indexOf("menu_") == 0) {
        $(this).attr('title', aLangKeys[lang][ $(this).attr('key') ]);
      } else {
        $(this).text(aLangKeys[lang][ $(this).attr('key') ]);
      }       
    });
  });
});

用作字典的数组在这里初始化:

var aLangKeys = new Array();
aLangKeys['de'] = new Array();
aLangKeys['en'] = new Array();

aLangKeys['de']['menu_business'] = 'Leistungen';
aLangKeys['en']['menu_business'] = 'Business';

使用 Firebug 调试函数时,标题为空,但我可以正确看到所有其他属性,例如 hrefclass

我尝试使用.prop (>= jquery 1.6)、.attr (.title 读取/写入 title。一个都没用。

我使用的 jQuery 包括:

<!-- include jQuery library -->
<script type="text/javascript" src="js/jquery-1.4.4.min.js"></script>
<!-- jquery tools script -->
<script type="text/javascript" src="js/jquery.tools.min.js"></script>
<!-- jqtransform script for forms -->
<script type="text/javascript" src="js/jquery.easing.1.3.js"></script>
<script type="text/javascript" src="js/jquery.tinyscrollbar.min.js"></script>

【问题讨论】:

  • 没有帮助。也尝试过像$(this).attr('title','test123'); / $(this).attr('title',"test123");一样对其进行硬编码
  • @Kai - 看起来可以在这里工作:jsfiddle.net/2xpHr。单击.lang 时是否记录了任何错误?
  • @Kai - 我刚刚重新制作了尽可能接近您的代码的小提琴,它仍然可以正常工作:jsfiddle.net/2xpHr/3 - 如果有任何错误被抛出,请发布,我可以采取看。
  • @Joe 没有错误被抛出,但也无法看到标题属性的变化
  • @Kai - 你不能用萤火虫检查元素并看到变化吗?或者,如果没有,只需将console.log($('.tr:first').attr('title')); 添加到该函数的末尾以记录第一个.tr 的标题属性并检查它是否使用正确的语言。

标签: javascript jquery firebug


【解决方案1】:

我认为你可以使用语言代码属性和语言选择器:

http://www.w3schools.com/tags/ref_language_codes.asp

http://api.jquery.com/lang-selector/

您可以通过 CSS 或 Javascript/JQuery 设置 HTML 元素的可见性,代码更少,灵活性更高,如下所示:

$('.lang').click( function() {
    var lang = $(this).attr('id'); // obtain language id

    // translate all translatable elements
    $('div[lang]').css('display','none');
    $(':lang('+lang+')').css('display','initial');
} );

使用重复的 html 元素(通过 CSS 隐藏辅助语言):

<div lang="de">blabla deutch</div>
<div lang="en">blabla english</div>

【讨论】:

  • 可能不是坏主意,但现在仍有很多工作要做编辑我已经在做的所有东西......
  • 看这里:jsfiddle.net/vmwK5 看起来 :lang 不能用作选择器
  • 未捕获的异常:Syntax error, unrecognized expression: Syntax error, unrecognized expression: lang
  • 尝试在您的第一个小提琴中将$(':lang') 替换为$('div[lang]') 并记住包含JQuery :) 现在我正确地编辑了答案! http://jsfiddle.net/vmwK5/3/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多