我做了一个简单的例子(见演示)我正在努力的代码。我首先有一个函数来计算<p>
在包装器div中的行数。根据数字(1,2或3行),包装器div应该得到一个额外的类名。
这些是我无法解决的错误:
该功能在运行后停止(正如您在日志记录中看到的那样):
if (getRows('.item p') === 1) {
}
当我在该函数中记录结果时,我得到Window对象,我需要特定的div来添加类,以便我的绝对链接可以正确定位
因此结果是绝对链接应该相应于行数。
是的,我知道这段代码可以用不同的方式编写(就像在我的p ...下面放置绝对链接一样)但是CMS是这样呈现它的,这将是最简单的解决方法..如果你想要查看应该如何在第一项div上添加item_1,在第二项上添加item_2等结果。
if (getRows('.item p') === 1) {
console.log('1 line');
console.log(this);
}
if (getRows('.item p') === 2) {
console.log('2 lines');
}
if (getRows('.item p') === 3) {
console.log('3 lines');
}
答案 0 :(得分:2)
以这种方式编写代码
$('.item p').each(function() {
var $this = $(this),
rows = getRows($this);
console.log('%d lines', rows);
/* add class */
$this.parent().addClass('item_' + rows);
});
答案 1 :(得分:2)
您应该使用每个声明:http://jsfiddle.net/astynax777/pndJx/1/
$('.item p').each(function() {
var rows = getRows(this);
switch (rows)
{
case 1:
console.log('1 line');
break;
case 2:
console.log('2 lines');
break;
case 3:
console.log('3 lines');
break;
};
});
function getRows(selector) {
var height = $(selector).height();
var font_size = $(selector).css('font-size');
var scale = 1.50
var line_height = Math.floor(parseInt(font_size) * scale);
var rows = height / line_height;
return Math.round(rows);
}
答案 2 :(得分:0)
听起来您希望单独为每个<div>
运行该逻辑。如果是这种情况,那么我建议:
function getRows(selector, context) {
var height = $(selector, context).height();
var font_size = $(selector, context).css('font-size');
var scale = 1.50
var line_height = Math.floor(parseInt(font_size) * scale);
var rows = height / line_height;
return Math.round(rows);
}
$('div.item').each(function () {
if (getRows('.item p', this) === 1) {
// if ".item p" equals 1 then add class "item_1" to item div
console.log('1 line');
console.log(this); //if i log this i get window (the document), but I need to get the specific div to add the class..
}
//console gives back result '1 line' since true and does not continue..
if (getRows('.item p', this) === 2) {
// if ".item p" equals 2 then add class "item_1" to item div
console.log('2 lines');
}
if (getRows('.item p', this) === 3) {
// if ".item p" equals 3 then add class "item_1" to item div
console.log('3 lines');
}
});
在传递给.each()
this
的匿名函数的上下文中,引用了特定的<div>
元素,而不是window
。