获取标记中的列表值' a'一个接一个地使用JavaScript

时间:2014-05-10 07:01:03

标签: javascript html

在这里,我将手动制作一个标签云。一切顺利,但我遇到了一个小问题。以下是我的代码:

HTML:

    <ul id="tagCloud">
            <li id="tagcloud_li">Item1</li>
                <li id="tagcloud_li">Item2</li>
    </ul>
    <div id="vis">
            <div class="set_texts">

            </div>
     </div> 

JavaScript:

         $(function() {
                var liArray = document.getElementsByTagName('li');
                var list_item = [];
                for(var i=0; i < liArray.length ;i++){
                    list_item.push($(liArray[i]).text());
                    var get_item_value = ($(liArray[i]).text());

                    var create_text = $('#vis').find('.set_texts').append($('<a href="" id="tagcloud_list" class="tagcloud_li'+i+'">'));
                    $('#vis').find(".tagcloud_li"+i).text($(liArray[i]).text());
                }
                var count_li = $('#vis').find('#tagcloud_list').length+1;
                for(var i=0; i < liArray.length ;i++){

                        for(var j = 0; j < count_li; j++){

                                   if(i == j){
                                       var get_item_value = ($(liArray[i]).text());
                                       var get_class = $('#vis').find('a').text(get_item_value).append(get_class);
                                    }
                                }
                }
             });

此代码的输出为:

      <a href="" id="tagcloud_list" class="tagcloud_li0" style="font-size:12px;text-decoration:none; color: #FF7600;">Item2</a>
      <a href="" id="tagcloud_list" class="tagcloud_li0" style="font-size:12px;text-decoration:none; color: #FF7600;">Item2</a>

在此输出中,两者都包含值'Item2'。

但我希望在第一个标签'a'中获得值'item1',在第二个标签'a'中获得'item2'值。赞:

      <a href="" id="tagcloud_list" class="tagcloud_li0" style="font-size:12px;text-decoration:none; color: #FF7600;">Item1</a>
      <a href="" id="tagcloud_list" class="tagcloud_li0" style="font-size:12px;text-decoration:none; color: #FF7600;">Item2</a>

我怎么能得到这个?

3 个答案:

答案 0 :(得分:3)

HTML:

<ul id="tagCloud">
    <li id="tagcloud_li">Item1</li>
    <li id="tagcloud_li">Item2</li>
</ul>
<div id="vis">
    <div class="set_texts"></div>
</div>

CSS:

.set_text {
    height:500px;
    width:500px;
    background-color:#FFFFFF;
    font-family:Arial;
    border: 1px solid #FFFFFF;
    text-align:left;
}
.tagcloud {
    font-size:12px;
    text-decoration:none;
    color: #FF7600;
}

JS:

$(function () {
    var container = $("#vis").find(".set_texts");
    $("#tagCloud").find('li').each(function (i) {
        $('<a href="" id="tagcloud_list" class="tagcloud tagcloud_li' + i + '"/>').text($(this).text()).appendTo(container);
    });
});

Sample: (Fiddle)

创建的代码云很简单,但它是您的代码所做的。

答案 1 :(得分:0)

您的代码非常复杂,因此您无法确定这一点。即,

var liArray = document.getElementsByTagName('li');
var list_item = [];
for(var i=0; i < liArray.length ;i++){
    list_item.push($(liArray[i]).text());
    var get_item_value = ($(liArray[i]).text());

    var create_text = $('#vis').find('.set_texts').append($('<a href="" id="tagcloud_list" class="tagcloud_li'+i+'" style="font-size:12px;text-decoration:none; color: #FF7600;">'));
    $('#vis').find(".tagcloud_li"+i).text($(liArray[i]).text());
}

可能会减少到这个:

$("li").each(function() {
    var item = $(this);
    var text = item.text();

    $('<a href="" class="tagcloud_list" id="tagcloud_li'+i+'" style="font-size:12px;text-decoration:none; color: #FF7600;">')
        .text( text )
        .appendTo( $('#vis').find('.set_texts') );
});

此循环的示例是从DOM中多次获取相同的信息,并在其中一种情况下删除它。通过性能,这是昂贵的。接下来你可能会改变添加<a>的方式,这样你就不需要先将它添加到目标容器中,只是为了得到一个后来给它回复的查询。

结果<a>都使用相同的ID,这也是不好的。所以尝试交换类和ID。

根据您的问题,此代码似乎至关重要:

var get_class = $('#vis').find('a').text(get_item_value).append(get_class);

在您的目标中找到所有<a> ,将单个文本分配给所有

答案 2 :(得分:0)

将您的Javascript更改为此..我使用了Jquery ..

$(document).ready(function(){
  var liArray = $("li");
  var i;
  for(i=0;i < liArray.length;i++){
    $("div.set_texts").append('<a href="" id="tagcloud_list" class="tagcloud_li'+i+'" style="font-size:12px;text-decoration:none; color: #FF7600;">' + liArray[i].innerHTML + '</a>'); 
  }
  });