使用Javascript显示权重

我有一个更改用户偏好的javascript函数,如果他们想要权重为公制或英制。

在我的页面上我打印出重量,IE:

This is some description: This product weights 200 KG Blah blah 

我需要这样做以便Javascript更改页面上所有权重的权重测量,并且我不确定解决此问题的最佳方法。 您可以创建自己的标签或标签属性吗?

感谢任何建议,JQuery很好。

我建议使用strong而不是b ,但下面的任何一个都适用。

编辑 :比使用类更好的解决方案,下面是工作示例。

使用类标记权重,例如:

 This product weighs 200 KG 

然后在您的JavaScript中,您可以像这样切换:

 $('.weight').each(function() { var $this = $(this); var original = $this.text(); var converted = /* ...convert the weight here... */; $this.text(converted); }); 

显然你可以稍微缩小一点,为了清晰起见,请保持冗长。

更好的方案:

使用原始权重(您在数据库中存储的权重)标记元素作为data-weight属性,例如:

 This product weighs 200 KG 

然后从该值转换:

 $('[data-weight]').each(function() { var $this = $(this); var value = $this.attr("data-weight"); if (usingMetric) { $this.text(value + " KG"); } else { value = parseFloat(value) * 2.20462262; // Convert to imperial $this.text(value.toFixed(2) + " lbs"); } }); 

工作示例: http : //jsbin.com/icure3

data-xyz格式的属性将通过HTML5的validation ; 在HTML5之前,它们在技术上无效,但无害。 但是如果您更喜欢不使用data-weight的版本,则可以使用类来实现: http : //jsbin.com/icure3/2 (灵感来自Reigel对Tom的其他问题的回答)。

如果你看到在较慢的浏览器上切换公制和英制时的延迟(我正在看你,微软),你可以通过给它更多的上下文而不仅仅是“[data-weight]”来帮助jQuery的选择器引擎进行优化。 jQuery的引擎几乎支持所有CSS3 。 例如,如果您始终只使用data-weight属性中的一种标记(例如, strong标记),请将选择器更改为“strong [data-weight]”,以便选择器引擎知道它可以针对一个特定标记进行优化名称。 类似地,如果所有这些都在某个容器内(例如,ID为“productList”的div),您可以更多地帮助引擎(“#productList strong [data-weight]”),这样它就可以忽略任何东西在那个div之外。 我把它完全保持在上面。 但是,如果页面很大且足够复杂,您可能只会感到烦恼,以至于您会发现性能问题。

最后的想法:要在禁用JavaScript的浏览器中抛出骨头,您可以在title属性中同时包含这两个值,例如:

 This product weighs 200 KG 

…所以它显示为浏览器上的工具提示。 我在上面的例子中包含了这个。

我会添加一个类.weight并使用它来定位所有权重..

 $('.weight').each(function(){...}) 

如果要更改innerHTML ,可以直接使用html()方法

 $('.weight').html(function(idx, oldhtml){ // you can use the oldhtml to extract info and create the new text here.. $(this).html( ../*you new html here*/.. ); // replace existing with new html .. }) 

HTML:

 200 KG 

使用Javascript:

 $("#UnitChangeButton").click(function() { $('.weight').each(function(){ txt = $(this).text(); newTxt = convert(txt); $(this).text(newTxt); }); }); 

您需要实现convert函数。 您可以将状态(公制或英制)存储在javascript变量中。