JQuery () возвращает true - PullRequest
       4

JQuery () возвращает true

0 голосов
/ 30 октября 2019

У меня есть эта строка, которая может представлять две вещи: какой-то текст или якорный тег с текстом. Я написал что-то, чтобы всегда возвращать текст следующим образом:

$(text).is('a') ? $(text).text() : text;

Моя логика заключается в том, что если текст является тегом привязки? вернуть содержимое тега привязки: если это не так, то это уже просто текст, поэтому верните его.

Мой вопрос заключается в том, почему следующее выражение возвращает true:

$('a').is('a');

Is проверяетдля письма или якорного элемента? Как я могу проверить, является ли мой текст тегом привязки.

Я бы предпочел не использовать регулярные выражения

Редактировать:

У меня есть переменная x, которая может иметь эти значения:

x = 'some text' or x = '<a>some text</a>'

Как я всегда могу извлечь текст из моей переменной x.

Ответы [ 4 ]

0 голосов
/ 30 октября 2019

Мне не удалось воспроизвести проблему, как вы ее объяснили. Пожалуйста, смотрите: https://api.jquery.com/is/

Вот мое тестирование:

$(function() {
  var tableData = [
    "Text 1",
    "Text 2",
    "<a>Text 3</a>",
    "Text 4"
  ];

  function isLink(el) {
    return $(el).is("a");
  }

  var x = [];
  $.each(tableData, function(i, s) {
    x.push(isLink(s) ? $(s).text().trim() : s);
  });
  $(".results").html(x.join(", "));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="results"></div>

Вы можете передать текст, элемент или даже объект jQuery в функцию.

0 голосов
/ 30 октября 2019

У меня есть эта строка, которая может представлять две вещи: какой-то текст или якорный тег с текстом. Я написал что-то, чтобы всегда возвращать текст следующим образом:

$(text).is('a') ? $(text).text() : text;

Моя логика заключается в том, что если текст является тегом привязки? возвратите содержимое тега привязки: если это не так, то это уже просто текст, поэтому верните его.

Если возможно, я бы не допустил, чтобы text был расплывчатым.

Вы, конечно, не можете просто сбросить текст в $() и предположить, что все будет хорошо. Например, $("Some text here") ищет в DOM элементы с тегом here внутри элементов с тегом text внутри элементов с тегом Some.

Вы сказали, что хотите различать

text = "Some text here"

и

text = "<a>Some text here</a>"

Я бы просто посмотрел на строку. Частично вдохновленный проверкой jQuery, является ли то, что вы передаете, селектором или HTML ( здесь ), как насчет:

text = text.trim();
if (text.substring(0, 2) === "<a" && text.substr(-1) === ">") {
    text = $(text).text();
}

или аналогичного?

Но опять же,Я бы не стал ставить себя на это место, если бы у тебя был выбор.

0 голосов
/ 30 октября 2019

Просто установите строку, которая у вас есть, в элемент HTML. Захватите текст элемента, и вы не будете беспокоиться о том, является ли он якорем или простым текстом.

function getText (content) {
  var div = document.createElement("div")
  div.innerHTML = content
  return div.textContent
}

console.log('some text', getText('some text'))
console.log('<a>some text</a>', getText('<a>some text</a>'))

Если вы хотите использовать jQuery

function getText (content) {
  return $("<div></div>", {html: content}).text()
}

console.log('some text', getText('some text'))
console.log('<a>some text</a>', getText('<a>some text</a>'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
0 голосов
/ 30 октября 2019

'a' является допустимым селектором запросов. Он выберет все якорные элементы в вашем документе. Поэтому $('a').is('a') говорит: «найдите в документе теги привязки и скажите мне, являются ли они тегами привязки» - это всегда будет так, если в вашем документе нет тегов привязки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...