Используйте getElementById для элементов, которые [еще] не находятся в DOM?

Если вам действительно нужно десериализовать число как целое число, вы можете реализовать пользовательский JsonConverter как:

public class CustomConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return typeof(object).Equals(objectType);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JToken jToken = JValue.ReadFrom(reader);
        switch (reader.TokenType)
        {
            case JsonToken.Integer:
                return jToken.Value<int>();
            case JsonToken.String:
                return jToken.Value<string>();
            // ...and so on...
            default:
                throw new ArgumentException($"Unknown JsonToken: '{reader.TokenType}'.");
        }
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        serializer.Serialize(writer, value.ToString());
    }
}

Передать экземпляр пользовательского класса преобразователя в метод DeserializeObject() как:

JsonConvert.DeserializeObject<SettingsModel>(reader.ReadToEnd(), new CustomConverter());
6
задан 7 April 2012 в 22:52
поделиться

4 ответа

Если он не является частью документа, вы не можете получить его с помощью document.getElementById . getElementById выполняет поиск в DOM, поэтому элемент должен быть в дереве, чтобы его можно было найти. Если вы создаете плавающий элемент DOM, он просто существует в памяти и недоступен из DOM. Он должен быть добавлен в DOM, чтобы быть видимым.

Если вам понадобится ссылаться на элемент позже, просто передайте ссылку другой функции - все объекты в JavaScript передаются по ссылке, поэтому работайте с этим плавающим элементом DOM из внутри другой функции изменяет оригинал, а не копию.

5
ответ дан 17 December 2019 в 04:50
поделиться

Для любого натыкающегося на эту проблему в или после 2019, вот обновленный ответ.

принятый ответ от Andrew Noyes корректен в этом document.getElementById, не будет работать, если элемент не существует в документе, и вышеупомянутый код уже содержит ссылку на желаемый элемент так или иначе.

Однако, если Вы не можете иначе получить прямую ссылку к своему желаемому элементу, рассмотрите использование селекторы . Селекторы позволяют Вам получать узлы, которые существуют просто в памяти, например:

var child = document.createElement("div");
child.id = "my_id";

var parent = document.createElement("div");
parent.appendChild(child);

var child2 = parent.querySelector("#my_id");
0
ответ дан 17 December 2019 в 04:50
поделиться

getElementById - это метод объекта документа. Он не вернет ничего, чего нет в документе.

Не сохранять ссылку, а? Если бы вы могли магическим образом вытащить его из воздуха с помощью id, то воздух был бы ссылкой на него.

0
ответ дан 17 December 2019 в 04:50
поделиться

Если вы создали его, просто передать объект другим функциям и получить к нему прямой доступ?

function createDiv()
{
  var newElement = document.createElement('div');
  doWorkWithDiv(newElement);
}

function doWorkWithDiv(element)
{
  element.className = 'newElementCSS';
  element.innerHTML = 'Text inside newElement';
  addToDoc(element);
}

function addToDoc(element)
{
  document.body.appendChild(element);
}
0
ответ дан 17 December 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: