基于td元素.text()值访问具有css背景图像的存储值的对象

时间:2017-09-10 20:56:32

标签: javascript php jquery html

我检查了其他答案,但没有发现任何相似之处。我不确定我的方法是否可行。

我有一个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);

然后它有效。

我在服务器上运行它,我希望没有小提琴/代码集

就足够了

1 个答案:

答案 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>