悬停时需要数组中项的索引号

时间:2015-05-27 16:01:46

标签: javascript jquery html arrays jquery-hover

我对JavaScript比较陌生,我正在开发一个简单的项目。我虽然陷入困境,但我对如何获得解决方案表达了一些看法。 我有一个简短的产品阵列,如:

var products = [
   {
    name: "paper",
    price: 2.00,
    description: "White College-ruled Paper, 100 sheets",
    location: "Aisle 5"
   },
   {
    name: "pens",
    price: 5.00,
    description: "10 Pack, Black Ink Ball Point Pens"
    location: "Aisle 2"
   },
   {
    name: "paper clips",
    price: 0.50,
    description: "Silver Paper Clips, 100 count"
    location: "Aisle 6"
   }
  ]

我使用JS循环遍历此数组并将结果打印到ID为"输出"的DIV中的页面。

function print(message) {
  var outputDiv = document.getElementById('output');
  outputDiv.innerHTML = message;
}

for (var i = 0; i < products.length; i += 1) {
  product = products[i];
  message += '<div class="col-md-4" id="prod-block">';
  message += '<p id="prod-description">' + product.name + ' ' + product.description + '</p>';
  message += '<h2 id="price">$' + product.price  + '</h2>';
  message += '</div>'
}
print(message);

所有这一切都很好。我的页面上有我的产品。现在,我想要的是当鼠标悬停在任何项目div上时,在单独的div中显示其他信息(例如位置)。 我的问题是 - 你如何识别正在盘旋的项目的索引号?截至目前,索引号仅存在于for循环中,我无法弄清楚如何在不同的函数中访问它。

同样,我的知识是有限的,所以我不确定在for循环中编写HTML是否是最好的方法。我真的很感激任何建议或批评!!

5 个答案:

答案 0 :(得分:0)

尝试在创建具有所需索引编号的div时添加提示工具。

<div title="The index number">

答案 1 :(得分:0)

您的代码中存在一些问题:滥用id。许多元素的ID为prod-blockprod-description,但id has to be unique

这样做,您只需检查ID即可轻松检测到哪个元素悬停。有多种技术可以做到这一点,如果你想学习jQuery,这很容易启动this way

答案 2 :(得分:0)

如果你使用jQuery,你可以使用data()来定义DOM元素的data属性,但你也可以使用jQuery将这个元素添加到DOM中。

$.each(products, function(i, product) {
    // Create DOM element
    var _ = $('<div class="col-md-4" id="prod-block">'
        + '<p id="prod-description">' + product.name + ' ' + product.description + '</p>'
        + '<h2 id="price">$' + product.price  + '</h2>'
        + '</div>');
    // Set product data
    _.data("product", product);
    // Add element to the DOM
    $("#output").append(_);
});

答案 3 :(得分:0)

这里应该有所帮助。

我更新了您的列表以包含id属性,我用它来为正在创建的data分配div属性。在悬停时,它会查找data-prodid并在additional部分显示该内容。

Fiddle

var products = [{
    id: 0,
    name: "paper",
    price: 2.00,
    description: "White College-ruled Paper, 100 sheets",
    location: "Aisle 5"
  }, {
    id: 1,
    name: "pens",
    price: 5.00,
    description: "10 Pack, Black Ink Ball Point Pens",
    location: "Aisle 2"
  }, {
    id: 2,
    name: "paper clips",
    price: 0.50,
    description: "Silver Paper Clips, 100 count",
    location: "Aisle 6"
  }],
  message = '';

function print(message) {
  var outputDiv = document.getElementById('output');
  outputDiv.innerHTML = message;
}

for (var i = 0; i < products.length; i += 1) {
  product = products[i];
  message += '<div data-prodid="' + product.id + '" class="col-md-4" id="prod-block">';
  message += '<p id="prod-description">' + product.name + ' ' + product.description + '</p>';
  message += '<h2 id="price">$' + product.price + '</h2>';
  message += '</div>'
}
print(message);

$('.col-md-4').hover(function() {
  $('#additional').html($(this).data('prodid'));
});

另外

您发布的javascript在您的product变量中有错误,并且从未声明过消息。

答案 4 :(得分:0)

这里有多个选项,例如添加数据作为元素的属性,但我相信你最好的选择是显式创建HTML元素,这样你就可以将事件监听器附加到它们,然后将它们附加到DOM;这不是将输出div元素的innerHTML设置为所需HTML的字符串表示。

var output = document.getElementById("output");
var hoverOutput = document.getElementById("hovertext");
for (var i = 0, len = products.length; i < len; i++) {
  product = products[i];
  var newDiv = document.createElement("div");
  newDiv.className = "col-md-4";
  newDiv.innerHTML = '<p class="prod-description">' + product.name + ' ' + product.description + '</p><h4 class="price">$' + product.price + '</h4>';
  (function() {
    var num = i;
    var target = hoverOutput;
    newDiv.onmouseover = function() {
      target.innerHTML = num;
    };
  })();
  output.appendChild(newDiv);
}

查看下面的工作示例:

var products = [{
  name: "paper",
  price: 2.00,
  description: "blah blah",
  location: "aisle 5"
}, {
  name: "paper clips",
  price: 0.5,
  description: "blah bloo blab",
  location: "aisle 6"
}];
var output = document.getElementById("output");
var hoverOutput = document.getElementById("hovertext");
for (var i = 0, len = products.length; i < len; i++) {
  product = products[i];
  var newDiv = document.createElement("div");
  newDiv.className = "col-md-4";
  newDiv.innerHTML = '<p class="prod-description">' + product.name + ' ' + product.description + '</p><h4 class="price">$' + product.price + '</h4>';
  (function() {
    var num = i;
    var target = hoverOutput;
    newDiv.onmouseover = function() {
      target.innerHTML = num;
    };
  })();
  output.appendChild(newDiv);
}
#hovertext {
  font-weight: bold;
  color: red;
  min-height: 10px;
}
#output div {
  border: 1px solid black;
}
.col-md-4{line-height:.2em;}
<div id="output"></div>
<div id="hovertext">Hover over an item to see its index here</div>