原谅我没有更具体的这一点.我有这么奇怪的错误.在doc加载之后,我循环了一些原来的元素data-itemname="",并使用它来设置这些值.attr("data-itemname", "someValue").
问题:当我后来循环通过这些元素时,如果我这样做elem.data().itemname,我会得到"",但如果我这样做elem.attr("data-itemname"),我会得到"someValue".这就像jQuery的.data()getter只获取最初设置为包含某些值的元素,但如果它们最初是空的,稍后设置,则稍后.data()不会获取该值.
我一直试图重新创建这个bug,但一直没能.
编辑
我重新创建了这个bug!http://jsbin.com/ihuhep/edit#javascript,html,live
另外,链接上面的片段......
JS:
var theaters = [
{ name: "theater A", theaterId: 5 },
{ name: "theater B", theaterId: 17 }
];
$("#theaters").html(
$("#theaterTmpl").render(theaters)
);
// DOES NOT WORK - .data("name", "val") does NOT set the val
var theaterA = $("[data-theaterid='5']");
theaterA.find(".someLink").data("tofilllater", "theater5link"); // this does NOT set data-tofilllater
$(".someLink[data-tofilllater='theater5link']").html("changed link text"); // never gets changed
// WORKS …Run Code Online (Sandbox Code Playgroud) 编辑:
我了解到使用其他价值_blank,而不是在移动浏览器上工作以打开新的窗口/标签.
例如,如果您需要打开一个新窗口/选项卡:
这适用于所有浏览器,甚至是移动浏览器:target="_blank".
这不适用于移动浏览器,但它可以在桌面浏览器上运行:target="new".
-
虽然我有这个工作,但我不确定是否有更好的方法,或者我得到它的方式是正确/唯一的方式.
基本上我正在做的是将所有target="_new"或target="_blank"属性值替换为target="nw",这样只打开一个新窗口,并且在其中打开所有其他新窗口以便不会使具有多个窗口的用户不堪重负.
我还添加了" 在新窗口中打开 " title=""属性.
所以我创建的解决方案是这样的:
$("a[target='_blank'], a[target='_new']").attr('target','nw').attr('title','Opens in a new window');
Run Code Online (Sandbox Code Playgroud)
注意这两种.attr();方法.
这是向元素添加两个属性的正确方法吗?
我试过.attr('target','nw','title','Opens in a new window')但它没用.
我问的原因是因为DYR(不要重复自己)原则,所以如果我可以改进我的代码,那么很好,如果没有,那就是它的本质.
谢谢.
jquery ×2