【问题标题】:Calling an html attr when html is echo'd回显 html 时调用 html attr
【发布时间】:2013-01-27 03:28:40
【问题描述】:

我通过将 html 从我的控制器回显到 ajax 函数来创建一个列表。所以我的javascript通过ajax获取这些数据并创建li的......然后我想从这个创建的html中调用一个属性......它不起作用。 ...我做错了什么?

JAVA 脚本

//创建列表

$.ajax({
             url:'ol_locations',  // ol_locations is a controller, see below.
             dataType: 'html',

                success: function (data3){

            //  list elements in the ordered list


            $('ol.locations_list').html(data3);
                }});
//list populated successfully

控制器 ol_location ....

公共函数 ol_locations(){

    $this->load->model('model_location');
    $data = $this ->model_location -> fetch_location_data();
    $i=1;
    foreach ($data as $row){



        if ($row->Type == 'locality'){

            echo "<div data-color ='red' id='".$i."'><li><a href ='#'> <span class='location_title'>". $row -> Nickname . " </span> ". $row->FormattedAddress .
            "</a> <a class='remove_location' title='Remove this location' data-nid='{$row->Id}'
            style='float:right;'>x</a>" ." </li> </div>";
            $i++;
        }
        else {
                 echo "<div data-color ='red' id='".$i."'><li> <a href ='#'><span class='location_title'>". $row -> Nickname. " ". $row -> Radius ." km of </span> ". " </span> ". $row->FormattedAddress ."</a><a class='remove_location' title='Remove this location' data-nid='{$row->Id}'style='float:right;'>x</a>" ." </li> </div>";
            $i++;
        } }
}

现在 HTML 呈现良好...但是当我尝试访问此“创建的 html”中的任何元素时,没有任何反应...

例如 alert ($('#1').attr('color'));将给出“null”或未定义。

我尝试了很多类似的东西

var initial_location = $('ol.locations_list li a'). attr('href');

仍然为空...

我真的被困在这里了……

【问题讨论】:

  • 我没有看到$("ol.locations_list"),应该是$("#1").data('color')$("#1").attr('data-color')
  • 控制台您的 ajax 数据并在 google chrome 浏览器中打开控制台 (ctrl+alt+j) 然后查看您收到的 html...以下是控制台的代码....console.log( $('ol.locations_list').html())
  • 类似问题及其解决方法:stackoverflow.com/questions/6958851/…
  • HTML 无效...LI 不能是 DIV 的子级,DIV 不能是 OL 的子级。浏览器在无法将其解析为写入时,通常会移动无效的 html。使用 w3c 验证器检查它
  • html 是否真的被添加到 DOM 中?

标签: php javascript jquery ajax


【解决方案1】:

既然您说 html 已正确添加到您的 DOM,那么您可能会尝试在新元素实际加载之前访问它们。确保仅在$('ol.locations_list').html(data3); 之后放置与新元素相关的任何代码,例如 -

$.ajax({
         url:'ol_locations',  // ol_locations is a controller, see below.
         dataType: 'html',

            success: function (data3){

        //  list elements in the ordered list


        $('ol.locations_list').html(data3);
}}).done(function() {
    alert ($("#1").attr('data-color'));
});

【讨论】:

  • Javascript 在页脚中,是的,可能是这种情况......当我查看页面源代码时,我在 html 中什么也看不到 .. 但可以通过 firebug 看到所有内容,我也可以看到生成的 html在页面上。
  • 谢谢罗伊。你是对的。 javascript 在没有生成 html 的页面加载后加载...在我看来,解决方案是在页面之前加载一部分 javascript,在页面之后加载另一部分...我只是通过 php 生成代码.. 谢谢大家他们的帮助
  • 没问题。建议将所有代码放在一个部分,如果您的代码与 DOM 元素相关,请在使用上述方法或 $(function() {}); - 这意味着 - 文件加载完成后。顺便说一句,如果此答案解决了您的问题,请考虑投票和/或将其标记为已接受的答案。
猜你喜欢
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
  • 2019-03-13
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
相关资源
最近更新 更多