Я сделал новую версию DynamicJsonConverter, которая использует объекты Expando. Я использовал объекты expando, потому что я хотел Сериализовать динамическую обратно в json с помощью Json.net.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Dynamic;
using System.Web.Script.Serialization;
public static class DynamicJson
{
public static dynamic Parse(string json)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
jss.RegisterConverters(new JavaScriptConverter[] { new DynamicJsonConverter() });
dynamic glossaryEntry = jss.Deserialize(json, typeof(object)) as dynamic;
return glossaryEntry;
}
class DynamicJsonConverter : JavaScriptConverter
{
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
if (dictionary == null)
throw new ArgumentNullException("dictionary");
var result = ToExpando(dictionary);
return type == typeof(object) ? result : null;
}
private static ExpandoObject ToExpando(IDictionary<string, object> dictionary)
{
var result = new ExpandoObject();
var dic = result as IDictionary<String, object>;
foreach (var item in dictionary)
{
var valueAsDic = item.Value as IDictionary<string, object>;
if (valueAsDic != null)
{
dic.Add(item.Key, ToExpando(valueAsDic));
continue;
}
var arrayList = item.Value as ArrayList;
if (arrayList != null && arrayList.Count > 0)
{
dic.Add(item.Key, ToExpando(arrayList));
continue;
}
dic.Add(item.Key, item.Value);
}
return result;
}
private static ArrayList ToExpando(ArrayList obj)
{
ArrayList result = new ArrayList();
foreach (var item in obj)
{
var valueAsDic = item as IDictionary<string, object>;
if (valueAsDic != null)
{
result.Add(ToExpando(valueAsDic));
continue;
}
var arrayList = item as ArrayList;
if (arrayList != null && arrayList.Count > 0)
{
result.Add(ToExpando(arrayList));
continue;
}
result.Add(item);
}
return result;
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
public override IEnumerable<Type> SupportedTypes
{
get { return new ReadOnlyCollection<Type>(new List<Type>(new[] { typeof(object) })); }
}
}
}
Если Вы знаете, что элемент вводит тогда: (например: замените 'элемент' 'отделением')
$("element[id$='txtTitle']")
, Если Вы не знаете тип элемента:
$("[id$='txtTitle']")
[еще 114] информация, доступная
<час>
// the old way, needs exact ID: document.getElementById("hi").value = "kk";
$(function() {
$("[id$='txtTitle']").val("zz");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="ctl_blabla_txtTitle" type="text" />
Попробуйте
$("element[id$='txtTitle']");
редактирование: 4 секунды поздно: P
$('element[id$=txtTitle]')
не строго необходимо заключить в кавычки фрагмент текста, которому Вы соответствуете против
Безопаснее добавлять подчеркивание или $ к искомому термину, поэтому вероятность совпадения с другими элементами, заканчивающимися на тот же идентификатор, меньше:
$("element[id$=_txtTitle]")
(где element - это тип элемента, который вы пытаетесь найти - например, div
, input
и т. д.
(Обратите внимание, вы предполагаете, что в ваших идентификаторах есть символы $, но я думаю, что .NET 2 теперь имеет тенденцию использовать символы подчеркивания в вместо идентификатора, поэтому в моем примере используется подчеркивание).
Пример:
для выбора всех
с идентификатором, заканчивающимся на _edit:
jQuery("a[id$=_edit]")
или
jQuery("a[id$='_edit']")