如何更改元素的文本而不更改其当前元素?

时间:2016-08-14 19:14:08

标签: javascript jquery html ajax

enter image description here

$.ajax({
    type: "GET",
    url: "my url" + x,
    datatype: "html",
    success: function(data){
        //alert(x);
         //var Content = data;
         var sendId ;
         var data = $.parseJSON(data);
         var jsonArray = data.result;

        // var data2 = $.parseJSON(jsonArray);
         var jsonArray3 = jsonArray.oilFilter;
         $.each(jsonArray3,function(i1,js2){
             var proname = js2.productName;
             var mrp = js2.mrp;
             var deliveryStatus = js2.deliveryStatus;
             var oilid = js2.productId;
             $(".oilid").val(oilid);
             $(".deliveryStatusOil").html(deliveryStatus);
             $(".mrpoil").html(mrp);
             $(".oilprodetail").html(proname);


         });

    <label id="oilprodetail" class="oilprodetail"></label><br/>
    <label id="mrpoil" class="mrpoil"></label><br/>
    <a onClick="ajax_cross(this);" id="oilid" class="oilid" >View</a>

如果你查看代码,我正在为id oilprodetail和mrpoil分配标签标签的值,我也对油脂做同样的事情, 我的要求是将oilid值发送到标签并保留其中的视图, 请帮忙?我是ajax的新手..

enter image description here

在上面的图片中,我需要做的视图中的右侧部分, 但是当我发送数据时,它会更改为图片的左侧部分,就像它从视图更改为发送的值

2 个答案:

答案 0 :(得分:0)

您可以使用data属性来保持“a”标记的innerHTML。喜欢:

$(".oilid").attr('data-oilid',oilid);

答案 1 :(得分:0)

您的代码存在以下问题:

  • 您拼错了datatype,应该是dataType;
  • 即使拼写正确,你也错误地将数据类型识别为HTML:你真的期望JSON,这是不同的东西;
  • 如果没有dataType属性(这是你的情况),jQuery会猜测数据类型,并可能猜测它是JSON。在这种情况下,$.parseJSON将失败,因为jQuery已经解码了JSON字符串并将结果显示为data参数;
  • 您使用.html(...)方法将某些元素的内容设置为某些文本。 html()只应在内容确实是HTML时使用,否则(我认为是您的情况),您应该.text(...);
  • a元素没有value属性,因此在其上调用.val()没有达到预期效果;
  • 您希望将oilid值传递给ajax_cross函数,但提供this,这是一个HTML元素(a),而不是值。
  • 在迭代数组时,您反复设置每次迭代中完全相同的元素的内容,这意味着只有最后一次迭代才能确定内容的内容。您应该将每个文本放在适当的元素中,避免覆盖以前的书面值。
  • 您共享的HTML,只有用于将第一个数组元素的结果写入的空间 - 第二行,第三行等应该有相似的元素。

要解决所有这些问题,您可以从这段代码中获得灵感:

$.ajax({
    type: "GET",
    url: "my url" + x,
    dataType: "json", // corrected spelling and type
    success: function(data){
        // Don't parse as JSON string any more, data alread is object;
        // Don't name your variable jsonArray, it is neither of those
        var result = data.result;
        var jsonArray3 = result.oilFilter;
        $.each(jsonArray3, function (i1, js2) {
            var proname = js2.productName;
            var mrp = js2.mrp;
            var deliveryStatus = js2.deliveryStatus;
            var oilid = js2.productId;
            // bind onclick handler with oilid argument bound to it:
            // use `get()` to select the next element of the same class:
            $(".oilid").get(i1).off('click').on('click', ajax_cross.bind(null, oilid));
            // use text(), not html()
            $(".deliveryStatusOil").get(i1).text(deliveryStatus);
            $(".mrpoil").get(i1).text(mrp);
            $(".oilprodetail").get(i1).text(proname);
        });
    }
});

<label id="oilprodetail" class="oilprodetail"></label><br/>
<label id="mrpoil" class="mrpoil"></label><br/>
<!-- remove onclick attribute, we bind the handler dynamically -->
<a id="oilid" class="oilid" >View</a>

<hr><!-- repeat elements for second row -->
<label id="oilprodetail" class="oilprodetail"></label><br/>
<label id="mrpoil" class="mrpoil"></label><br/>
<!-- remove onclick attribute, we bind the handler dynamically -->
<a id="oilid" class="oilid" >View</a>

<hr><!-- repeat elements for third row -->
<label id="oilprodetail" class="oilprodetail"></label><br/>
<label id="mrpoil" class="mrpoil"></label><br/>
<!-- remove onclick attribute, we bind the handler dynamically -->
<a id="oilid" class="oilid" >View</a>

上面的内容仍然不理想,因为您可以在迭代Ajax结果时更好地动态创建元素,因此您可以拥有所需数量的元素。