我使用一个简单的插件为我的模板添加一些功能:
$('.foo').ellipsis({
lines: 3
});
我想用函数而不是数字来表示要显示的行数:
$('.foo').ellipsis({
lines: function() { return 3 }
});
由于某种原因,这不起作用。我很确定这不是插件故障,而是我对其工作方式的误解。有什么想法吗?
codepen位于:
答案 0 :(得分:2)
要使代码生效,必须构建插件以接受函数作为lines
属性的值。从源代码中,我注意到lines
的唯一有效值是字符串"auto"
或数值。
你需要做这样的事情:
$('.foo').each(function() {
$(this).ellipsis({ lines: $(this).data('truncate-lines') });
});
如果您想修改插件以支持您的代码,请在init()
中添加以下代码作为第一行代码:
if(typeof base.opts.lines === 'function') {
base.opts.lines = base.opts.lines.call(el);
}
答案 1 :(得分:1)
jquery.elipsis的文档并不表示插件支持传递到lines
参数的函数,源代码也没有。
一个选项是执行该函数并传入返回的值。但是,由于该函数立即执行,因此与初始方法相比几乎没有什么好处:
$('.foo').ellipsis({
lines: (function() { return 3 })()
});
答案 2 :(得分:0)
简单的方法是在页面加载时调用省略号。
// page load
// get data attribute
var ellipsis = $('elem').attr('truncate-lines')
// call the plugin
$('.foo').ellipsis({
lines: par``seInt(ellipsis, 10)
});
答案 3 :(得分:0)
您可以尝试制作您传递的对象,以便线条是吸气剂..
此外,如果您想要更精细的控制,您可以查看Object.defineProperty
var obj = {};
obj.__defineGetter__('lines', function () { return 3; });
console.log('obj.lines = ' + obj.lines);
//$('.foo').ellipsis(obj);