private function apply($targetNodes, $content, callable $handler)
{
$result = array();
$isSetterFunction = FALSE;
if ($callback = Constraints::isCallable($content)) {
$isSetterFunction = TRUE;
} else {
$contentNodes = $this->build()->getContentNodes($content);
}
foreach ($targetNodes as $index => $node) {
if ($isSetterFunction) {
$contentData = $callback($node, $index, $this->build()->getInnerXml($node));
if (!empty($contentData)) {
$contentNodes = $this->build()->getContentNodes($contentData);
}
}
if (!empty($contentNodes)) {
$resultNodes = call_user_func($handler, $node, $contentNodes);
if (is_array($resultNodes)) {
$result = array_merge($result, $resultNodes);
}
}
}
return $result;
}