我检查了其他答案,但没有发现任何相似之处。我不确定我的方法是否可行。
我有一个CRUD应用程序,所有的PHP和SQL代码都可以正常工作。
在用户输入时,它获取所查询食物的食物值。
食物名称放在td元素中。
我想要的是基于该td元素.text()方法的jQuery值添加背景图像。
这是HTML,都是在服务器端生成的:
<tr>
<th>#</th>
<th>Food Name</th>
<th>Calories/100g</th>
<th>Proteins</th>
<th>Carbohydrates</th>
<th>Fats</th>
<th>Time_to_burn_by_running</th>
</tr>
我得到的td元素的当前值是这样的:
var currentFood = $('td:eq( 1 )').text(); //cache it
alert(currentFood); // test it, works fine
我将背景图像存储在此对象中:
var imgSources = {
almond: "https://www.vigon.com/wp-content/uploads/2015/04/almonds.jpg",
banana: "https://www.organicfacts.net/wp-content/uploads/2013/05/Banana3-
1020x765.jpg",
cereal: "http://nutryvidasaude.com.br/Imagens/Produtos/240420170917331.jpg",
};
现在,我显然可以对函数中的每种食物选择和硬编码进行if评估,但这并不好,并且违反了所有DRY原则。
这是我尝试的方法,我不确定将这样的事情连接起来是否可以。
$(function(){
if(jQuery){
/* alert("i am here"); */
}
if($('table').length == 0) {
alert("table is not generated yet");
}
else {
$('table').prop('id', 'mainTable');
var reso = $('#mainTable').attr('id')
alert("table id is "+ reso);
// this is the relevant part
var currentFood = $('td:eq( 1 )').text();
alert(currentFood);
alert(imgSources.cereal); // testing what is returned.
if($('table').length > 0) { $('#mainTable').fadeOut(100, function() {
$('#mainTable').fadeIn(2000);
// this one does not work
$('#mainTable').css('background-image', 'imgSources + "." +
currentFood').fadeIn(3000);
});}
}
});
控制台中没有错误消息。这只是串联问题吗?
如果我做 :
$('#mainTable').css('background-image', 'someurl').fadeIn(3000);
然后就可以了。
我正在服务器上运行它,我希望它足够好了,不用小提琴/ codepen
最佳答案
问题是因为imgSources
是一个变量,所以您不能将其包含在字符串中-您需要将其与尝试访问的属性一起进行连接。
由于将属性名称存储在currentFood
变量中,因此您还需要使用括号符号来访问对象。试试这个:
var imgSources = {
almond: "https://www.vigon.com/wp-content/uploads/2015/04/almonds.jpg",
banana: "https://www.organicfacts.net/wp-content/uploads/2013/05/Banana3-1020x765.jpg",
cereal: "http://nutryvidasaude.com.br/Imagens/Produtos/240420170917331.jpg",
};
var currentFood = $('#mainTable td:eq(1)').text();
$('#mainTable').css('background-image', 'url(' + imgSources[currentFood] + ')').fadeIn(3000)
#mainTable {
height: 300px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="mainTable">
<thead>
<tr>
<th>#</th>
<th>Food Name</th>
<th>Calories/100g</th>
<th>Proteins</th>
<th>Carbohydrates</th>
<th>Fats</th>
<th>Time_to_burn_by_running</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>almond</td>
<td>550</td>
<td>18</td>
<td>14</td>
<td>48</td>
<td>55 </td>
</tr>
</tbody>
</table>