我通过连接字符串元素在Javascript中创建HTML标记。像这样:
var makeButton = function (el) {
'use strict';
var config = el.attr("data-config"),
dyn = $.parseJSON(config),
hover = false,
state = 'up',
hrf = '',
...
if (dyn.href) {
hrf = 'href="' + dyn.href + '" ';
}
...
// when all variables have been set, concat
iconspan = dyn.icon ? '<span class="ui-icon ' + icn + icp + ics + '"> </span>' : '';
textspan = '<span class="ui-btn-text">' + txt + '</span>';
innerspan = '<span class="ui-btn-inner">' + textspan + iconspan + '</span>';
btn = '<a data-role="button" data-wrapperels="span" class="ui-btn ' + hvr + cls + '" ' + data_icp + data_thm + data_min + data_inl + '>' + innerspan + '</a>';
return btn;
};
当所有设置完成后,我将字符串返回给调用函数,在那里它被插入到正在创建的其他字符串中。我想知道是否有可能存储我正在创建的任何信息。因为我没有实例化到jQuery (= $( btn )
),我不能使用data()
之类的东西添加任何信息。
问题:
因此,如果我有一个普通的"字符串",我有什么替代方案(如果有的话)来存储该字符串上的信息?
那么如果我有一个普通的"字符串",我有什么替代方法(如果有的话)来存储该字符串上的信息?
。基本值可以没有属性,所以你不能在上存储任何内容。要么切换到对象,要么将信息存储在由字符串值标识的其他静态结构中(当然,这时函数需要返回不同的字符串,并且垃圾收集有些复杂)。
所以你可以只使用String
对象包装你想返回的字符串。它们在基本操作(例如串联)中具有相同的行为,但您可以在它们上存储额外的信息:
btn = new String(btn);
btn.data = …;
return btn;
我不完全确定您想要实现什么(可能值得考虑使用像mustash .js这样的模板语言或下划线模板,而不是连接字符串),但是如果您想在两个分散的数据位之间创建关系,那么关联数组应该完成这项工作。
// Use a JavaScript object as an Associative Array.
dataByButtonMarkupMap = {};
// Build your button markup as before.
btnMarkup = "..."
// Use the markup as a Key in the associative array, don't worry that it's massive, as long
// as it's a string (or can be coerced to one), it can be used as a key.
dataByButtonMarkupMap[btnMarkup] = "some data";
// You can now retrieve that data via the button markup
var myData = dataByButtonMarkupMap[btnMarkup];
可能值得考虑重构你的设计,这样你就可以返回一个同时封装了模板字符串和数据的对象,而不是传递字符串,例如:
function makeButton() {
// ...
// Return an object instead of a string so you can encapsualte
// additional data alongside the template string.
return {
template: btn,
data: "some data"
}
}
希望对你有帮助。