如何使字符串作为JQuery中的数组对象
我已经得到了变量中的字符串值。如何使字符串作为JQuery中的数组对象
var mystring = '{"img_src":"/english/images/spa.jpg",
"img_title":"Enjoy a refreshing shower at 43,000 feet",
"img_alt":"Enjoy a refreshing shower at 43,000 feet",
"img_height":"326",
"img_width":"980",
"header":"Enjoy a refreshing shower at 43,000 feet",
"subheader":"One of many groundbreaking amenities",
"bg_color":"",
"url_href":"1"},
{"img_src":"/english/images/spa1.jpg",
"img_title":"Enjoy a refreshing shower at 43,000 feet",
"img_alt":"Enjoy a refreshing shower at 43,000 feet",
"img_height":"326",
"img_width":"980",
"header":"Enjoy a refreshing shower at 43,000 feet",
"subheader":"One of many groundbreaking amenities",
"bg_color":"",
"url_href":"1"}'
现在我想这个字符串变量转换为数组对象。所以,如果我尝试访问它,我的函数应该像一个数组对象。例如。
some code to Convert(mystring) to an Array Object(myArryObject)
,那么我想它传递给我的功能类似下面
$.fn.liveBanner = function(myArryObject,optional_options)
{
//here I want to access my myArryObject as below
alert(myArryObject[0].img_src) //then it should give "/english/images/spa.jpg"
});
请建议使用JQuery。
编辑:
我的变化通过@Deceze的建议,请参阅以下内容:
var myString = "'"+ $("#RotationImages #mainHidden").attr("value")+"'";
var myArrayobj = jQuery.parseJSON('[' + myString + ']');
alert(myArrayobj.img_src);
上面的代码是给下面的错误
Error: uncaught exception: Invalid JSON:'{"img_src":"/english/images/spa.jpg", "img_title":"Enjoy a refreshing shower at 43,000 feet","img_alt":"Enjoy a refreshing shower at 43,000 feet", "img_height":"326","img_width":"980","header":"Enjoy a refreshing shower at 43,000 feet","subheader":"One of many groundbreaking amenities on the Flight","bg_color":"","url_href":"1"}'
当你的字符串只包含数组内的对象,你有你解析它之前增加数组声明:
var myArrayobj = jQuery.parseJSON('[' + myString + ']');
嗯,一开始,你的输入的类型=“隐藏”,这意味着无论你在周围div上运行什么jQuery,这些元素都不会出现。如果您的边界div具有“display:none”,那么没有理由将输入类型设置为隐藏。
你真的需要修改你写这段代码的方式。你应该有一个样式表来隐藏图像(你应该把它作为图像放在代码中),然后你可以使用javascript来显示它们。您可以使用jQuery UI Tabs演示作为指导如何正确构建标记,然后从那里开始。
是否存在使用图像输入的特定原因?
好吧,你仍然没有在这里正确的方向。
你jQuery的有以下几点:
.attr('type','hidden').
这个段的类型设置为隐藏。然后,您将输出写入屏幕。
更改为:
.attr('type','image').
,看看是否有差别(你必须创建在您改回为“隐藏”,当你做了一个未设定功能)。
就像我说的,这实际上并不是最干净的方式来做你想做的事情,但我不能指出你任何其他方式,而不是建议你再次尝试使用不同的方法。
我的亲爱的朋友它不是输入类型的问题,我只是想将我所有的ImageDetail存储在一个变量中,我将用它来添加在我的JQuery中 – 2011-01-20 13:17:24
最后,我能够写一些JQuery,它帮助我解决我的问题,现在我能够得到我想要的HTML。下面是JQuery代码,请看一看,让我知道任何改进。
$(document).ready(function()
{
var rotationImagelength = $('#RotationImages input[type=hidden]').length; //Getting the length of the Rotation Image Input type hidder
var ImageDetail;
var $addDetails="";
var fromPageInput = $("<input>").attr("id", "mainHidden").attr("type", "hidden").attr("name", "fromPage").val(ImageDetail); //Generating the dynamic input type hidden
$('#RotationImages input[type=hidden]').each(function(index,element) //Loop for all the input type hidden in RotationImage DIV
{
if(index != rotationImagelength - 1) //Loop for checking not the last input hidden, we are adding extra Comma(,)
{
ImageDetail = '{"img_src":"'+ $(element).attr("src")+'", "img_title":"'+ $(element).attr("title")+'","img_alt":"'+ $(element).attr("alt")+'", "img_height":"'+ $(element).attr("height")+'","img_width":"'+ $(element).attr("width")+'","header":"'+ $(element).attr("header")+'","subheader":"'+ $(element).attr("subheader")+'","bg_color":"'+ $(element).attr("color")+'","url_href":"'+ $(element).attr("href")+'"},';
$addDetails += ImageDetail;
}
else //Generating HTML for the last input hidden
{
ImageDetail = '{"img_src":"'+ $(element).attr("src")+'", "img_title":"'+ $(element).attr("title")+'","img_alt":"'+ $(element).attr("alt")+'", "img_height":"'+ $(element).attr("height")+'","img_width":"'+ $(element).attr("width")+'","header":"'+ $(element).attr("header")+'","subheader":"'+ $(element).attr("subheader")+'","bg_color":"'+ $(element).attr("color")+'","url_href":"'+ $(element).attr("href")+'"}';
$addDetails += ImageDetail;
}
$(fromPageInput).val($addDetails); //Adding full values in the dynamic input hidden created above
});
$("#RotationImages").append($(fromPageInput)); //Appending to the RotationImage DIV so that we can easily use in JQuery.
var test = ($("#RotationImages #mainHidden").attr("value"));
alert(test);
});
感谢您的帮助,您的建议是随时欢迎
您需要使用JavaScript变种(我认为):因此,对
gImgs = [
{"img_src":"/english/images/spa.jpg",
"img_title":"Enjoy a refreshing shower at 43,000 feet",
"img_alt":"Enjoy a refreshing shower at 43,000 feet",
"img_height":"326",
"img_width":"980",
"header":"Enjoy a refreshing shower at 43,000 feet",
"subheader":"One of many groundbreaking amenities",
"bg_color":"",
"url_href":"1"}
];
然后
$('.slideshow').liveBanner(gImgs, {"autostart":false,
"pause_time":5500, "random":false});
每一页你将有不同的gImgs
。请注意,如果包括对liveBanner
创建一个脚本,你将有<script src="..."></script>
之前定义gImgs
,如:
<html>
<head>
<!-- ... -->
<script type="application/x-javascript">
<!--
var gImgs = [ /* ... */ ];
-->
</script>
<script type="application/x-javascript" src="yourscript.js"></script>
</head>
<body>
<!-- ... -->
</body>
</html>
许多感谢@RC你看到我的编辑部分的问题,我我在var test中获得了我需要的值,我的liveBanner函数查找数组$ .fn.liveBanner = function(images,optional_options) {//如果你做了alert(images [0] .img_src),你会得到第一个图像src });我很惊讶,为什么我的上面的代码不起作用 – 2011-01-22 11:10:51
我的观点是,使用dom作为你想要的存储是个坏主意。此外,你的attr值将是文本,而不是JS对象,这就是为什么它不起作用 – 2011-01-22 11:18:59
你可以请建议在这种情况下做什么,如果我也尝试在javascript数组中转换我的字符串,但仍然无法修复我的问题。 – 2011-01-22 11:19:56
鉴于你mystring
定义,执行var myArray = jQuery.parseJSON('[' + mystring } ']');
将导致对象的数组。查看this jsfiddle作为一个实例。
您得到无效JSON错误的原因是因为您将有效的JSON封装在单引号中,从而使其无效。也就是,第一行:
var myString = "'"+ $("#RotationImages #mainHidden").attr("value")+"'";
var myArrayobj = jQuery.parseJSON('[' + myString + ']');
alert(myArrayobj.img_src);
正在使您的JSON无效。应(提供的值是正确的)的第一行:
var myString = $("#RotationImages #mainHidden").attr("value");
此外,您的代码在这里看起来不完整。我想你错过了很多东西。看起来好像你正试图改变不在标记中的图像上的img src。如果我是你,我会修改整个事情。 – tadywankenobi 2011-01-20 12:16:04
感谢Tady,请看我更新的答案我只是落后一步才能得到我的结果,请参阅更新的JQuery部分。 – 2011-01-20 12:24:03