使用jquery在每次加载时选择一次随机xml条目

时间:2010-09-06 18:38:33

标签: jquery

我正在尝试从xml文件中的多个条目中进行选择,并在网页上显示它们。我似乎无法弄清楚我做错了什么......有没有人有建议?

感谢您的时间: - )

    <script type="text/javascript">

    var numLow = 1;
    var numHigh = 3;
    var adjustedHigh = (parseFloat(numLow))+1;
    var numRand = Math.floor(Math.random()*adjustedHigh)+parseFloat(numLow); 

$.ajax({
type: 'GET',
url: '../xml/testad.xml',
dataType: 'xml',
success: function(xml_list) {

var xmlArr = [];

$(xml_list).find('entry').each(function(i) {
  var xml_id = $(this).attr('id');
  if(xml_id == numRand) return; //keep going if this wasn't the right ID

    var xml_name        = $(this).find('name').text();
    var xml_link        = $(this).find('link').text();
    var xml_url         = $(this).find('url').text();
                      // Add matched items to an array
    xmlArr += '<div class="ad"><a href="';
    xmlArr += xml_url;
    xmlArr += '" alt="'
    xmlArr += xml_name;
    xmlArr += '"><img src="';
    xmlArr += xml_link;
    xmlArr += '" /></a></div>';

}); // end each loop

 //Append array to adviewer div (this way is much faster than doing this individually for each item)

    $(xmlArr).appendTo('#adviewer');
    $('#adviewer').show();
}
});
</script>

上面看起来“应该”有效,但实际上并没有选择随机录入...

<script type="text/javascript">

var numLow = 1;
var numHigh = 3;
var adjustedHigh = (parseFloat(numLow))+1;
var numRand = Math.floor(Math.random()*adjustedHigh)+parseFloat(numLow);

$.ajax({
type: 'GET',
url: '../xml/testad.xml',
dataType: 'xml',
success: function(xml_list) {

var xmlArr = [];

$(xml_list).find('entry').each(function() {

 var xml_id       = $(this).attr('id');

 var xml_name      = $(this).find('name').text();
 var xml_link   = $(this).find('link').text();
 var xml_url   = $(this).find('url').text();
       // Add matched items to an array
 xmlArr += '<div id=: '
 xmlArr += xml_id;
 xmlArr += '"class="ad"><ahref="';
 xmlArr += xml_url;
 xmlArr += '" title="'
 xmlArr += xml_name;
 xmlArr += '"><img class="ad" src="';
 xmlArr += xml_link;
 xmlArr += '"></a></div>';

 if(id == numRand).appendTo(div +' class="adviewer"');
 }

}); // end each loop

</script>

1 个答案:

答案 0 :(得分:0)

认为你所追求的是这样的:

$(xml_list).find('entry').each(function(i) {
  var xml_id = $(this).attr('id');
  if(i != numRand) return; //keep going if this wasn't the right ID
  var xml_name = $(this).find('name').text(),
      xml_link = $(this).find('link').text(),
      xml_url  = $(this).find('url').text();

  var div = $('<div />' { 'id': xml_id, 'class': 'ad' });
  div.append($('<a />', { 'href': xml_url, 'title': xml_name }));
  div.append($('<img />', {'class': 'ad', 'src': xml_link }));
  div.appendTo('div.adviewer');
}); // end each loop

目前存在一些语法错误,主要是这样:

if(id == numRand).appendTo(div +' class="adviewer"');
在jQuery对象上调用

.appendTo()以附加到某个内容,<div class="adviewer">的选择器看起来像div.adviewer,就像我上面一样。

其余的更改集中在切换到$(html, props) DOM元素创建方法到属性句柄编码等(例如,如果你有任何引用)。同样id在你的问题/代码中未定义...我假设你在这里指的是索引,如果你没有,那么将if(i != numRand)更改为{{1相反,它将与XML中的ID进行比较。