【问题标题】:Add new class to new data from Ajax with JSON data type使用 JSON 数据类型将新类添加到来自 Ajax 的新数据
【发布时间】:2016-10-17 10:53:11
【问题描述】:

我的Ajax 请求工作正常并返回所需的数据。但我想将新的class 添加到<li> 元素,这是我从AJAX 请求中获得的。我正在尝试在 Ajax success 下添加新类,即 $elm.addClass("newclass"),但我没有看到这个新类被添加到新的 li 元素中。没有错误。我不确定这有什么问题,因为我也没有收到任何错误。

function  loadSuccess(data, status, obj)
 {


for (i = 0; i < data.length; i++) {
    var nodeid = data[i].attr.id;

    if (nodeid=="BALX") {

        $("#"+nodeid).addClass("selected");

    }
 }


};

HTML--来自 Chrome Inspector-->第一次--父节点--

  <ul role="tree"   style="outline:none">
        <li role="treeitem" id="ALLACCOUNTS" <span >ALLACCOUNTS --1</span></a></li>
 </ul>

-------------点击父节点“ALLACCOUNTS”后--这是一个Ajax调用-----

   <ul role="tree"  style="outline:none"><li role="treeitem" id="ALLACCOUNTS" ><a  class=""><span class="oj-tree-title">ALLACCOUNTS --1</span></a><ul class="" style="overflow: hidden; display: block;"><li id="BALX" ><a ><span >BALSHEET --2</span></a></li></ul></li></ul>

【问题讨论】:

  • 你能创建一个 JSFiddle 吗?如果您在 $("#"+nodeid).addClass("selected"); 上设置断点,控制台是否会显示 $('#BALX') 的匹配结果?
  • @mwilson:- 是的,它进入了 IF 子句,我可以在 DOM 中看到带有 BALX 的 nodeid。就是它没有向这个元素添加新类。我不确定 Ajax Success 是否适合这种操作。
  • 你的nodeid是正确的id吗?在浏览器控制台上打印
  • 我使用伪造的 jsfiddle ajax 调用在下面发布了一个答案。尝试确保您的匹配正确(网址除外)。但是,我仍然愿意成为您的选择器。向我们展示您的 BALX 元素的 HTML
  • 如果您正在从控制台查找添加的类。尝试关闭控制台并再次检查。或者为所选班级添加一些红色边框尝试。 Addclass 必须正常工作,但有时它可能在控制台中不可见。

标签: javascript jquery json ajax oracle-jet


【解决方案1】:

尝试使用 .class 而不是 #id。 并使用您的console.log( $("#"+nodeid) ); 查找此元素,以验证它是否确实存在。 也许你有多个 onde #id 元素并得到一些错误。

$("#nodeid_name").addClass('selected'); 强制输入浏览器控制台,例如$("#BALX").addClass('selected');,看看会发生什么。

【讨论】:

    【解决方案2】:

    以下是您尝试完成的示例。我想你可能会选择你的选择。尝试使用开发人员工具确保 jquery 确实在查找元素:

    https://jsfiddle.net/9j429sw4/

    HTML

    <div id="test1">Test 1</div>
    <div id="test2">Test 2</div>
    <div id="test3">Test 3</div>
    <div id="test4">Test 4</div>
    

    CSS

    .selected {
      background-color: green;
      color: red;
    }
    

    JavaScript

    var ids = ["test1", "test2", "test3", "test4"];
    $.ajax({
        type: 'GET',
        url: '/echo/json',
        success: function (response) {
          for (var i = 0; i < ids.length; i++) {
              if (ids[i] == "test2") $("#"+ids[i]).addClass('selected');
          }
        },
        error: function (err) {
          alert('error');
        }
    });
    

    【讨论】:

    • :- 感谢您快速创建它。在我的情况下,最初我加载单个节点说“父”,然后我们单击父节点,然后我正在加载它的子节点,当单击子节点时,我正在加载它的子节点。在这些 ajax 调用期间,我试图将新类应用于这些子节点。我可以看到这些子节点正在加载,但没有选择,而且当我检查 DOM 时,我没有发现这个新类添加到这些子节点中。
    • 如果您打开开发人员工具并设置一个断点,您希望应用该类并尝试使用您的控制台找到该 dom 元素,它将回答您所有的问题。我保证
    • 子节点的新 UL 元素只有在我单击其父节点时才会添加,因此对于断点,新节点不存在。我认为在 Ajax SUCCESS 中,新节点无法应用新类,因为节点是通过相同的 Ajax 请求新创建的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 2019-04-02
    • 2015-01-24
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多