我检查了其他答案,但没有发现任何相似之处。我不确定我的方法是否可行。
我有一个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",
};
现在,我显然可以对功能中的每个食物选择和硬编码进行评估,但这并不符合每个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);
然后它有效。
我在服务器上运行它,我希望没有小提琴/代码集
就足够了答案 0 :(得分:4)
问题是因为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>