Вы должны передать ссылку на запрос, как показано ниже
var options = { ... }
var req = http.request(options, function(res) {
// Usual stuff: on(data), on(end), chunks, etc...
});
req.setTimeout(60000, function(){
this.abort();
}).bind(req);
req.write('something');
req.end();
Запрос об ошибке будет вызван
req.on("error", function(e){
console.log("Request Error : "+JSON.stringify(e));
});
Если я правильно прочитал спецификацию , нет.
Вы можете сопоставлять элемент, имя атрибута в элементе и значение именованного атрибута в элементе. Я не вижу ничего для сопоставления содержимого внутри элемента.
Использование jQuery:
$('td:contains("male")')
Вы можете установить контент как атрибут данных, а затем использовать селектора атрибутов
/* Select every cell containing word "male" */
td[data-content="male"] {
color: red;
}
/* Select every cell starting on "p" case insensitive */
td[data-content^="p" i] {
color: blue;
}
/* Select every cell containing "4" */
td[data-content*="4"] {
color: green;
}
<table>
<tr>
<td data-content="Peter">Peter</td>
<td data-content="male">male</td>
<td data-content="34">34</td>
</tr>
<tr>
<td data-conten="Susanne">Susanne</td>
<td data-content="female">female</td>
<td data-content="14">14</td>
</tr>
</table>
Вы также может использовать jQuery, чтобы легко установить эти атрибуты содержимого данных
$(function(){
$("td").each(function(){
var $this = $(this);
$this.attr("data-content", $this.text());
});
});
.text()
и .textContent
довольно тяжелы, старайтесь избегать их в длинных списках или больших текстах, когда это возможно. .html()
и .innerHTML
работают быстро.
– oriadam
18 July 2017 в 14:09
Согласен атрибут данных (ответ вояджера) заключается в том, как его следует обрабатывать, НО, правила CSS, такие как:
td.male { color: blue; }
td.female { color: pink; }
часто могут быть намного проще настроить , особенно с клиентскими библиотеками вроде angularjs, которые могут быть такими же простыми, как:
<td class="{{person.gender}}">
Просто убедитесь, что контент - это всего лишь одно слово! Или вы даже можете сопоставить разные имена классов CSS с помощью:
<td ng-class="{'masculine': person.isMale(), 'feminine': person.isFemale()}">
Для полноты, вот подход атрибутов данных:
<td data-gender="{{person.gender}}">
Похоже, они думали об этом для спецификации CSS3, но не сделали разреза.
:contains()
Селектор CSS3 http://www.w3.org/TR/ CSS3-селекторы / # контент-селекторы
:contains()
можно найти здесь здесь .
– BoltClock♦
7 February 2012 в 07:06
Looks like they were thinking about it for the CSS3 spec but it didn't make the cut.
И по уважительной причине это нарушит всю предпосылку разделения стиля, содержания, структуры и поведения.
– Synetech
6 July 2015 в 22:01
Большинство ответов здесь предлагают альтернативу тому, как писать код HTML, чтобы добавить больше данных, потому что по крайней мере до CSS3 вы не можете выбрать элемент путем частичного внутреннего текста. Но это может быть сделано, вам просто нужно добавить немного ванильного JavaScript, обратите внимание, поскольку самка также содержит самец, он будет выбран:
cells = document.querySelectorAll('td');
console.log(cells);
[].forEach.call(cells, function (el) {
if(el.innerText.indexOf("male") !== -1){
//el.click(); click or any other option
console.log(el)
}
});
<table>
<tr>
<td>Peter</td>
<td>male</td>
<td>34</td>
</tr>
<tr>
<td>Susanne</td>
<td>female</td>
<td>14</td>
</tr>
</table>
<table>
<tr>
<td data-content="Peter">Peter</td>
<td data-content="male">male</td>
<td data-content="34">34</td>
</tr>
<tr>
<td data-conten="Susanne">Susanne</td>
<td data-content="female">female</td>
<td data-content="14">14</td>
</tr>
</table>
Боюсь, это невозможно, потому что контент не является атрибутом и недоступен через псевдокласс. Полный список селекторов CSS3 можно найти в спецификации CSS3 .
Ответ voyager об использовании атрибута data-*
(например, data-gender="female|male"
является наиболее эффективным и совместимым с стандартом по состоянию на 2017 год:
[data-gender='male'] {background-color: #000; color: #ccc;}
Практически большинство целей может достигать , поскольку существуют некоторые, хотя и ограниченные селектора, ориентированные вокруг текста. :: first-letter - псевдо-элемент , который может применяться ограниченным стилирование к первой букве элемента. Существует также псевдоэлемент :: first-line , кроме, очевидно, выбор первой строки элемента (например, параграф) также подразумевает, что очевидно, что CSS можно использовать для расширения этой существующей возможности для стилизации конкретных аспектов текстового узла.
До тех пор, пока такая защита не удастся и не реализована, следующая лучшая вещь, которую я мог бы предложить, когда это применимо, [explode
/ split
, используя пространственный разделитель, выводит каждое отдельное слово внутри элемента span
, а затем, если цель слова / стиля предсказуема используется в комбинации с : n-ыми селекторами :
$p = explode(' ',$words);
foreach ($p as $key1 => $value1)
{
echo '<span>'.$value1.'</span>;
}
Else , если не предсказуемо , снова используйте ответ voyager об использовании атрибута data-*
. Пример использования PHP:
$p = explode(' ',$words);
foreach ($p as $key1 => $value1)
{
echo '<span data-word="'.$value1.'">'.$value1.'</span>;
}
На самом деле существует очень концептуальная основа того, почему это не было реализовано. Это комбинация в основном трех аспектов:
Эти 3 вместе означают, что к тому моменту, когда у вас есть текстовое содержимое, вы не сможете вернуться к содержащему элементу, и вы не можете текст. Это, вероятно, значимо, поскольку спуск только позволяет синхронное отслеживание контекста и синтаксический анализ SAX. Восходящие или другие селекторы с участием других осей вносят потребность в более сложных обходах или аналогичных решениях, которые значительно усложнили бы применение CSS к DOM.
text()
.
– Mark Thomas
7 June 2013 в 14:25
Вам нужно добавить атрибут данных в строки с именем data-gender
со значением male
или female
и использовать селектор атрибутов:
HTML:
<td data-gender="male">...</td>
CSS:
td[data-gender="male"] { ... }
Custom data attributes are intended to store custom data private to the page or application, for which there are no more appropriate attributes or elements.
Ссылка на spec: link
– Ivan Durst
12 June 2015 в 23:19
Authors can include data for inline client-side scripts or server-side site-wide scripts to process using the data-*="" attributes
– DannyMeister
7 July 2015 в 21:50
Если вы используете Chimp / Webdriver.io , они поддерживают намного больше селекторов CSS , чем спецификация CSS.
Это, например, щелкнет по первому якорю, содержащему слова «Bad bear»:
browser.click("a*=Bad Bear");
Для тех, кто хочет сделать Selenium CSS text selections, этот скрипт может быть полезен.
Фокус в том, чтобы выбрать родителя элемента, который вы ищете, а затем выполнить поиск дочерний элемент, который имеет текст:
public static IWebElement FindByText(this IWebDriver driver, string text)
{
var list = driver.FindElement(By.CssSelector("#RiskAddressList"));
var element = ((IJavaScriptExecutor)driver).ExecuteScript(string.Format(" var x = $(arguments[0]).find(\":contains('{0}')\"); return x;", text), list);
return ((System.Collections.ObjectModel.ReadOnlyCollection<IWebElement>)element)[0];
}
Это вернет первый элемент, если его больше одного, поскольку в моем случае это всегда один элемент.
Поскольку CSS не хватает этой функции, вам придется использовать javascript для стилей ячеек по контенту. Например, с xpath содержит
var elms = document.evaluate( "//td[contains(., 'male')]" ,node, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null )
. Затем используйте результат следующим образом:
for ( var i=0 ; i < elms.snapshotLength; i++ ){
elms.snapshotItem(i).style.background = "pink";
}
:empty
. – Ciro Santilli 新疆改造中心 六四事件 法轮功 6 July 2014 в 11:55<i class="material-icons">face</i>
и<i class="material-icons">settings</i>
для различения значка, используемого, если нет возможности проверить текст? Я изо всех сил пытаюсь понять, как они это делают. – ConorReidd 11 July 2017 в 11:08